import { useState } from "react";
import {
  getCompanySettings,
  updateCompanySettings,
  type UpdateCompanySettingsPayload,
} from "../../services/companySettingsService";
import { customizeToast } from "../../utils";
import { createEntityMessages } from "../../helpers/messageHelper";

const companySettingsMessages = createEntityMessages("company settings");

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

  // Get Company Settings
  const getCompanySettingsAsync = async () => {
    try {
      setLoading(true);
      const response = await getCompanySettings();

      // Check if the response indicates success
      if (response?.data?.success !== false) {
        return {
          success: true,
          data: response.data,
          message: "Company settings fetched successfully",
        };
      } else {
        // Backend returned success: false, show the backend error message
        const errorMessage =
          response.data?.message || "Failed to fetch company settings";
        return {
          success: false,
          data: null,
          message: errorMessage,
        };
      }
    } catch (error: any) {
      setLoading(false);
      // Handle network errors or other exceptions
      const errorMessage =
        error?.response?.data?.message || error.toString();
      return {
        success: false,
        data: null,
        message: errorMessage,
      };
    } finally {
      setLoading(false);
    }
  };

  // Update Company Settings
  const updateCompanySettingsAsync = async (data: UpdateCompanySettingsPayload) => {
    try {
      setLoading(true);
      const response = await updateCompanySettings(data);

      // Check if the response indicates success
      if (response?.data?.success !== false) {
        customizeToast(companySettingsMessages.updated(), "success");
        return {
          success: true,
          data: response.data,
          message:
            response.data?.message || "Company settings updated successfully",
        };
      } else {
        // Backend returned success: false, show the backend error message
        const errorMessage =
          response.data?.message || companySettingsMessages.updateError();
        customizeToast(errorMessage, "danger");
        return {
          success: false,
          data: null,
          message: errorMessage,
        };
      }
    } catch (error: any) {
      setLoading(false);
      // Handle network errors or other exceptions
      const errorMessage =
        error?.response?.data?.message || error.toString();
      customizeToast(errorMessage, "danger");
      return {
        success: false,
        data: null,
        message: errorMessage,
      };
    } finally {
      setLoading(false);
    }
  };

  return {
    loading,
    getCompanySettings: getCompanySettingsAsync,
    updateCompanySettings: updateCompanySettingsAsync,
  };
}

export default useCompanySettingsService;
