"use server";

import { revalidateTag } from "next/cache";
import { employeeService, CreateEmployeeDto, UpdateEmployeeDto } from "@/services/employeeService";
import { getAuthHeaders } from "@/app/actions/config";
import { withServerAction } from "@/lib/server/server-action-wrapper";
import { CACHE_TAGS, DEFAULT_CACHE_PROFILE } from "./cache-tags";

export async function fetchEmployeesAction(params: {
  page: number;
  limit: number;
  search?: string;
  sortBy?: string;
  sortDirection?: string;
}) {
  return withServerAction(async () => {
    const headers = await getAuthHeaders();
    return await employeeService.getAll(params, { headers });
  });
}

export async function fetchEmployeeAction(id: number) {
  return withServerAction(async () => {
    const headers = await getAuthHeaders();
    return await employeeService.getById(id, { headers });
  });
}

export async function createEmployeeAction(data: CreateEmployeeDto) {
  return withServerAction(async () => {
    const headers = await getAuthHeaders();
    const result = await employeeService.create(data, { headers });
    revalidateTag(CACHE_TAGS.employees, DEFAULT_CACHE_PROFILE);
    revalidateTag(CACHE_TAGS.dashboard, DEFAULT_CACHE_PROFILE);
    return result;
  });
}

export async function updateEmployeeAction(id: number, data: UpdateEmployeeDto) {
  return withServerAction(async () => {
    const headers = await getAuthHeaders();
    const result = await employeeService.update(id, data, { headers });
    revalidateTag(CACHE_TAGS.employees, DEFAULT_CACHE_PROFILE);
    return result;
  });
}

export async function deleteEmployeeAction(id: number) {
  return withServerAction(async () => {
    const headers = await getAuthHeaders();
    await employeeService.delete(id, { headers });
    revalidateTag(CACHE_TAGS.employees, DEFAULT_CACHE_PROFILE);
    revalidateTag(CACHE_TAGS.dashboard, DEFAULT_CACHE_PROFILE);
    return { success: true };
  });
}

export async function deleteEmployeesBulkAction(ids: number[]) {
  return withServerAction(async () => {
    const headers = await getAuthHeaders();
    await employeeService.deleteBulk(ids, { headers });
    revalidateTag(CACHE_TAGS.employees, DEFAULT_CACHE_PROFILE);
    revalidateTag(CACHE_TAGS.dashboard, DEFAULT_CACHE_PROFILE);
    return { success: true };
  });
}
