"use client";

import { createContext, useContext, useState, useEffect, ReactNode } from "react";
import Cookies from "js-cookie";

const DEFAULT_FIELDS = "NOMBRE,CODIGO,RNC,NCF,SUB-TOTAL,ITBIS,PROPINA,TOTAL,FECHA,PRODUCTOS";
const COOKIE_NAME = "extractionFields";

interface FieldsConfigContextType {
  showModal: boolean;
  openModal: () => void;
  closeModal: () => void;
  fields: string;
  setFields: (fields: string) => void;
  saveFields: () => void;
  resetFields: () => void;
}

const FieldsConfigContext = createContext<FieldsConfigContextType | undefined>(undefined);

export function FieldsConfigProvider({ children }: { children: ReactNode }) {
  const [showModal, setShowModal] = useState(false);
  const [fields, setFields] = useState(DEFAULT_FIELDS);

  useEffect(() => {
    const savedFields = Cookies.get(COOKIE_NAME);
    if (savedFields) {
      setFields(savedFields);
    }
  }, []);

  const openModal = () => setShowModal(true);
  const closeModal = () => setShowModal(false);

  const saveFields = () => {
    Cookies.set(COOKIE_NAME, fields, { expires: 365 });
    closeModal();
  };

  const resetFields = () => {
    setFields(DEFAULT_FIELDS);
    Cookies.remove(COOKIE_NAME);
  };

  return (
    <FieldsConfigContext.Provider value={{ showModal, openModal, closeModal, fields, setFields, saveFields, resetFields }}>
      {children}
    </FieldsConfigContext.Provider>
  );
}

export function useFieldsConfig() {
  const context = useContext(FieldsConfigContext);
  if (context === undefined) {
    throw new Error("useFieldsConfig debe ser usado dentro de un FieldsConfigProvider");
  }
  return context;
}