import { defineStore } from 'pinia'
import { useApi } from '@/composables/useApi'

export const useOrderStore = defineStore('orderStore', {

  state: () => ({
    items: [],
    totalItems: 0,
    loading: false,
    error: null,
    rowsPerPage: 50
  }),

  actions: {

    async loadData(page = 1,payload = null) {
      try{
        const { data, error, loading, fetchAll, pagination } = useApi('order-list')
        await fetchAll(page,this.rowsPerPage,payload)
        if (data.value) this.items = data.value;
        if (error.value) this.error = error.value;
        this.loading = loading.value;
        this.totalItems = pagination.total;

      }catch(error){
        console.error(error);
      }
    },

    async placeOrder(form:any) {
        
        const validationStore = useValidationStore()
        validationStore.clearErrors()
           
        try{
            const { create } = useApi('place-order')
            const response = await create(form)
            if (response.status) return response;
            throw response;
        }catch(error){
            console.log("validation error");
            validationStore.setErrors(error);
            throw error;
        }
                
    },

    async invoice(form:any) {
        
      // const validationStore = useValidationStore()
      // validationStore.clearErrors() 
         
      try{

          const { download } = useApi('invoice-download')
          const response = await download(form)

          const contentType = response?.headers['content-type'];

          console.log("response from order store");
          console.log(contentType);
          // console.log(response?.data);

          if (contentType !== 'application/pdf') {
            // This is likely an error response in JSON
            const reader = new FileReader();
            reader.onload = () => {
             // console.error("Server error:", reader.result);
              alert("Failed to generate PDF. See console for error.");
            };
            reader.readAsText(response?.data);
            return;
          }
 

          // const blob = new Blob([response?.data], { type: 'application/pdf' });
          // const link = document.createElement('a');
          // link.href = window.URL.createObjectURL(blob);
          // link.download = `invoice_${Date.now()}.pdf`;
          // link.click();

          const url = window.URL.createObjectURL(new Blob([response?.data]))

         // window.URL.revokeObjectURL(url);


          const link = document.createElement('a')
          link.href = url
          link.setAttribute('download', `sales_report_${Date.now()}.pdf`)
          document.body.appendChild(link)
          link.click()
          
          // Cleanup
          link.remove()
          window.URL.revokeObjectURL(url)


          // if(response?.status == 200){
          //   console.log("condition is true .................");

          // }

          // const url = window.URL.createObjectURL(response);
          // const link = document.createElement('a');
          // link.href = url;
          // link.download = `invoice_${Date.now()}.pdf`;
          // document.body.appendChild(link);
          // link.click();
          // link.parentNode.removeChild(link);
          
          // Revoke the URL after download
         // setTimeout(() => window.URL.revokeObjectURL(url), 100);

          
      }catch(error){
          console.log(error);
          //validationStore.setErrors(error);
          throw error;
      }
              
    },

    async orderDetails(id: number,lang = "") {
      try{
        const { data, error, loading, fetchSingleData, pagination } = useApi('order-details')
        await fetchSingleData(id,lang);
        if (data.value) this.items = data.value;
        if (error.value) this.error = error.value;
        this.loading = loading.value;
      }catch(error){
        console.error(error);
      }
    },

    async memoPreview(pram: string) {
      try{
        const { data, error, loading, memo } = useApi('memo-preview')
        await memo(pram);
        if (data.value) this.items = data.value;
        if (error.value) this.error = error.value;
        this.loading = loading.value;
      }catch(error){
        console.error(error);
      }
    },


  }
})