import React, { useEffect,useState } from 'react'
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import { zodResolver } from '@hookform/resolvers/zod';
import { MasterRespository } from '../../repositories/MastersRepository';
import { clearApiCacheKey } from '../../slices/apiCacheSlice';
import { getCachedData,cacheData } from '../../slices/apiDataManager';
import showToast from '../../services/toastService';


const schema = z.object({
  name: z.string().min(1, { message: "Category name is required" }),
  description: z.string().min(1, { message: "Description is required" })
  .max(255, { message: "Description cannot exceed 255 characters" }),
});

const CreateWorkCategory = ({onClose}) => {

  const[isLoading,setIsLoading] = useState(false)
     const {
      register,
      handleSubmit,
      formState: { errors },reset
      
    } = useForm({
      resolver: zodResolver(schema),
      defaultValues: {
        name: "",
        description: "",
      
      },
    });
    
    const onSubmit = (data) => {
      setIsLoading(true)
    //   const result = {
    //     name: data.name,
    //     description: data.description,
    //   };
    
      MasterRespository.createWorkCategory(data).then((resp)=>{ 
        setIsLoading(false)
        resetForm()
        const cachedData = getCachedData("Work Category"); 
        const updatedData = [...cachedData, resp?.data]; 
        cacheData("Work Category", updatedData); 
        showToast("Work Category Added successfully.", "success");

        onClose()
      }).catch((error)=>{
        showToast(error?.response?.data?.message, "error");
        setIsLoading(false)
      })
   
     
    };
    const resetForm = () => {
      reset({
        name: "",
        description: ""
      });
      setDescriptionLength(0);
    }    

    useEffect(()=>{
        return ()=>resetForm()
    },[])
    
    const [descriptionLength, setDescriptionLength] = useState(0);
    const maxDescriptionLength = 255;    
  return (<>
    <form  className="row g-2" onSubmit={handleSubmit(onSubmit)}>
      <div className="col-12 col-md-12">
        <label className="fs-5 text-dark text-center d-flex align-items-center justify-content-center flex-wrap">Create Work Category</label>        
      </div>
      
        <div className="col-12 col-md-12">
          <label className="form-label">Category Name</label>
          <input type="text" 
           {...register("name")} 
             className={`form-control ${errors.name ? 'is-invalids' : ''}`}
          />
          {errors.name && <p className="text-danger">{errors.name.message}</p>}
        </div> 
        <div className="col-12 col-md-12">
          <label className="form-label" htmlFor="description">Description</label>
        <textarea
          rows="3"
          {...register("description")}
          className={`form-control ${errors.description ? 'is-invalids' : ''}`}
          onChange={(e) => {
            setDescriptionLength(e.target.value.length);
            register("description").onChange(e);
          }}
        ></textarea>
        <div className="text-end small text-muted">
          {maxDescriptionLength - descriptionLength} characters left
        </div>
          {errors.description && (
            <p className="text-danger">{errors.description.message}</p>
          )}
        </div>

        <div className="col-12 text-center">
        <button type="submit" className="btn btn-sm btn-primary me-3">           
         {isLoading? "Please Wait...":"Submit"}       
        </button>
        <button
          type="reset"
          className="btn btn-sm btn-label-secondary "
          data-bs-dismiss="modal"
          aria-label="Close"
        >
          Cancel
        </button>
      </div>
     
    </form>
 
    </>
  )
}

export default CreateWorkCategory;