"use server";

import { revalidatePath } from "next/cache";
import { hasPermission } from "@/lib/adminAuth";
import { getSessionClientId } from "@/lib/auth";
import { connectDB } from "@/lib/db";
import { MileageTrip } from "@/models/MileageTrip";

type MileageFormState = { error?: string };

export async function createMileageTripAction(_prev: MileageFormState, formData: FormData): Promise<MileageFormState> {
  if (!(await hasPermission("expenses_create"))) return { error: "Keine Berechtigung." };
  const createdBy = await getSessionClientId();
  if (!createdBy) return { error: "Nicht eingeloggt." };

  const dateRaw = String(formData.get("date") || "");
  const date = dateRaw ? new Date(dateRaw) : null;
  const km = Number(formData.get("km") || 0);
  const ratePerKm = Number(formData.get("ratePerKm") || 0);
  const purpose = String(formData.get("purpose") || "").trim();

  if (!date || Number.isNaN(date.getTime())) return { error: "Bitte ein gültiges Datum angeben." };
  if (!Number.isFinite(km) || km <= 0) return { error: "Bitte gültige Kilometer angeben." };
  if (!Number.isFinite(ratePerKm) || ratePerKm < 0) return { error: "Bitte einen gültigen Satz angeben." };

  await connectDB();
  await MileageTrip.create({ date, km, ratePerKm, amount: km * ratePerKm, purpose, createdBy });

  revalidatePath("/de/admin/mileage");
  return {};
}

export async function deleteMileageTripAction(tripId: string) {
  if (!(await hasPermission("expenses_delete"))) return;
  await connectDB();
  await MileageTrip.findByIdAndDelete(tripId);
  revalidatePath("/de/admin/mileage");
}
