import { useState } from "react";
import {
  getTechnologies,
  createTechnology,
  updateTechnology,
  assignTechnologyEmployees,
  type TechnologyFilters,
  type CreateTechnologyData,
  type UpdateTechnologyData,
  type AssignEmployeesData,
} from "../../services/employeeTechnologyService";
import { customizeToast } from "../../utils";

function useEmployeeTechnologyService() {
  const [loading, setLoading] = useState(false);

  const getTechnologiesAsync = async (filters?: TechnologyFilters) => {
    try {
      setLoading(true);
      const response = await getTechnologies(filters);

      if (response?.data?.success !== false) {
        return {
          success: true,
          data: response.data,
          message:
            response.data?.message || "Technologies fetched successfully",
        };
      } else {
        const errorMessage =
          response.data?.message || "Failed to fetch technologies";
        customizeToast(errorMessage, "danger");
        return { success: false, data: null, message: errorMessage };
      }
    } catch (error: any) {
      const errorMessage = error?.response?.data?.message || error.toString();
      customizeToast(errorMessage, "danger");
      return { success: false, data: null, message: errorMessage };
    } finally {
      setLoading(false);
    }
  };

  const createTechnologyAsync = async (data: CreateTechnologyData) => {
    try {
      setLoading(true);
      const response = await createTechnology(data);

      if (response?.data?.success !== false) {
        customizeToast("Technology created successfully", "success");
        return {
          success: true,
          data: response.data,
          message:
            response.data?.message || "Technology created successfully",
        };
      } else {
        const errorMessage =
          response.data?.message || "Failed to create technology";
        customizeToast(errorMessage, "danger");
        return { success: false, data: null, message: errorMessage };
      }
    } catch (error: any) {
      const errorMessage = error?.response?.data?.message || error.toString();
      customizeToast(errorMessage, "danger");
      return { success: false, data: null, message: errorMessage };
    } finally {
      setLoading(false);
    }
  };

  const updateTechnologyAsync = async (data: UpdateTechnologyData) => {
    try {
      setLoading(true);
      const response = await updateTechnology(data);

      if (response?.data?.success !== false) {
        customizeToast("Technology updated successfully", "success");
        return {
          success: true,
          data: response.data,
          message:
            response.data?.message || "Technology updated successfully",
        };
      } else {
        const errorMessage =
          response.data?.message || "Failed to update technology";
        customizeToast(errorMessage, "danger");
        return { success: false, data: null, message: errorMessage };
      }
    } catch (error: any) {
      const errorMessage = error?.response?.data?.message || error.toString();
      customizeToast(errorMessage, "danger");
      return { success: false, data: null, message: errorMessage };
    } finally {
      setLoading(false);
    }
  };

  const assignEmployeesAsync = async (data: AssignEmployeesData) => {
    try {
      setLoading(true);
      const response = await assignTechnologyEmployees(data);

      if (response?.data?.success !== false) {
        customizeToast("Employees assigned successfully", "success");
        return {
          success: true,
          data: response.data,
          message:
            response.data?.message || "Employees assigned successfully",
        };
      } else {
        const errorMessage =
          response.data?.message || "Failed to assign employees";
        customizeToast(errorMessage, "danger");
        return { success: false, data: null, message: errorMessage };
      }
    } catch (error: any) {
      const errorMessage = error?.response?.data?.message || error.toString();
      customizeToast(errorMessage, "danger");
      return { success: false, data: null, message: errorMessage };
    } finally {
      setLoading(false);
    }
  };

  return {
    loading,
    getTechnologies: getTechnologiesAsync,
    createTechnology: createTechnologyAsync,
    updateTechnology: updateTechnologyAsync,
    assignEmployees: assignEmployeesAsync,
  };
}

export default useEmployeeTechnologyService;
