
import axios from "axios";
import { baseUrl } from "../../constants/urls";

export const cartFetch = async (payload:any) => {
	let url = "";
  let config={};
  if(payload===null){
	 url = `${baseUrl}/api/checkout/cart`;

	 config = {
		method: 'GET',
		url: url,
		headers: {
			Accept: 'application/json',
		}
	};
}else{
  url = `${baseUrl}/api/checkout/cart?token=true`;

	 config = {
		method: 'GET',
		url: url,
		headers: {
			Accept: 'application/json',
      Authorization:`Bearer `+payload
    },
		}
	}

	const cart_res = await axios(config);
	return cart_res.data;
}

export const removeCartItem = async (payload: any) => {

  
  let url = "";
  let config={};
  if(payload.token===null){
	 url = `${baseUrl}/api/checkout/cart/remove-item/${payload.item_id}`;
	 config = {
		method: 'GET',
		url: url,
		headers: {
			Accept: 'application/json',
		}
	};
}else{
  url = `${baseUrl}/api/checkout/cart/remove-item/${payload.item_id}?token=true`;
  config = {
   method: 'GET',
   url: url,
   headers: {
     Accept: 'application/json',
     Authorization:`Bearer `+payload.token
   }
 };
}

	const cart_remove = await axios(config);


	return cart_remove.data;
}

export const emptyCartItem = async (payload: any) => {

  
  let url = "";
  let config={};
  if(payload.token===null){
 
	 url = `${baseUrl}/api/checkout/cart/empty`;
	 config = {
		method: 'GET',
		url: url,
		headers: {
			Accept: 'application/json',
		}
	};
}else{
  url = `${baseUrl}/api/checkout/cart/empty?token=true`;
  config = {
   method: 'GET',
   url: url,
   headers: {
     Accept: 'application/json',
     Authorization:`Bearer `+payload.token
   }
 };
}

	const cart_remove = await axios(config);


	return cart_remove.data;
}

export const removeCart = async (item_id: any) => {
	const url = `${baseUrl}/api/checkout/cart/remove-item/${item_id}`;
	const config = {
		method: 'GET',
		url: url,
		headers: {
			Accept: 'application/json',
		}
	};
	const cart_remove = await axios(config);
	return cart_remove.data;
}

export const updateCart = async (prod: any) => {
  // console.log(prod,"prod");
  
	try {
    let url = "";
    let config={};
    if(prod.token===null){
		 url = `${baseUrl}/api/checkout/cart/update`;
		 config = {
			method: 'PUT',
			url: url,
			headers: {
				Accept: 'application/json',
			},
			data: {
				qty: {
					[prod.id]: prod.quantity
				}
			}
		};
  }else{
    url = `${baseUrl}/api/checkout/cart/update?token=true`;
    config = {
     method: 'PUT',
     url: url,
     headers: {
       Accept: 'application/json',
       Authorization:`Bearer `+prod.token
     },
     data: {
       qty: {
         [prod.id]: prod.quantity
       }
     }
   };
  }

		const cart_remove = await axios(config);
		


		return cart_remove.data;
	} catch (error: any) {

// console.log(error,"error");

		return error?.response?.data;
	}

}

export const cartAddressAdd = async (payload:any) => {
// console.log(payload,"payload");

try {
  let url = "";
  let config={};
  if(payload.token===null){
   url = `${baseUrl}/api/checkout/save-address`
 config = {
  method: 'POST',
  url: url,
  headers: { 
    Accept: 'application/json'
  },
  
  data:{"billing":payload.billing,"shipping":payload.shipping}
};
  }else{
     url = `${baseUrl}/api/checkout/save-address?token=true`
    config = {
      method: 'POST',
      url: url,
      headers: { 
        Accept: 'application/json',
        Authorization:`Bearer `+payload.token
      },
      
      data:{"billing":payload.billing,"shipping":payload.shipping}
  }
}
 


const cart_address_add = await axios(config);
return cart_address_add.data;
  } catch (error:any) {
    
    // console.log(error);
    
    return error?.response?.data;
  }
  
}


export const cartShipping = async (payload:any) => {

  try {
    const url = `${baseUrl}/api/checkout/save-shipping?token=true`
  const config = {
    method: 'POST',
    url: url,
      headers: { 
        Accept: 'application/json',
        Authorization:`Bearer `+payload
      },
    data:{
      "shipping_method": "shipping_method_key"
    }
  };
  const cart_shipping= await axios(config);
  
  return cart_shipping.data;
    } catch (error:any) {
      
      // console.log(error);
      
      return error.response.data;
    }
    
  }

  export const cartShipping1 = async (payload:any) => {


    try {
      const url = `${baseUrl}/api/checkout/save-shipping?token=true`
      // console.log(url);
    const config = {
      method: 'POST',
      url: url,
        headers: { 
          Accept: 'application/json',
          Authorization:`Bearer `+payload.token
        },
      data:{
        shipping_method: payload.shipping_method
      }
    };
    const cart_shipping= await axios(config);
    
    return cart_shipping.data;
      } catch (error:any) {
        
        // console.log(error);
        
        return error?.response?.data;
      }
      
    }


    export const cartPayment = async (payload:any) => {

      try {
        const url = `${baseUrl}/api/checkout/save-payment?token=true`
      const config = {
        method: 'POST',
        url: url,
          headers: { 
            Accept: 'application/json',
            Authorization:`Bearer `+payload.token,
          },
        data:{
          "payment": {
            "method": payload.paymentMethod
          }
        }
      };
      const cart_payment= await axios(config);
      // console.log(cart_payment,"cart_payment");
      return cart_payment.data;
        } catch (error:any) {
          
          // console.log(error);
          
          return error.response.data;
        }
        
      }

    export const processPayment = async (payload: any) =>{
      try {
        const url = `${baseUrl}/api/customisation/get-payment-info?token=true`

        const config = {
          url,
          method: 'GET',
          headers: { 
            Accept: 'application/json',
            Authorization:`Bearer ${payload.token}`
          }
        };

        const payment= await axios(config);
        // console.log(payment,"payment");

        return payment.data;
      } catch (error:any) {
        // console.log(error);
        
        return error.response.data;
      }
    }

    export const applyCoupon = async (payload: any) =>{
      try {
        
        let url = "";
        let config={};
        if(payload.token===null){
         url = `${baseUrl}/api/checkout/cart/coupon`
       config = {
        method: 'POST',
        url: url,
        headers: { 
          Accept: 'application/json'
        },
        
        data:{"code":payload.code}
      };
        }else{
           url = `${baseUrl}/api/checkout/cart/coupon?token=true`
          config = {
            method: 'POST',
            url: url,
            headers: { 
              Accept: 'application/json',
              Authorization:`Bearer `+payload.token
            },
            
            data:{"code":payload.code}
        }
      }
       
      
      const code_apply = await axios(config);
      // console.log(code_apply,"code_apply");
      return code_apply.data;
        } catch (error:any) {
          
          // console.log(error);
          
          return error.response.data;
        }
    }


    export const removeCoupon = async (payload: any) =>{
      try {
        
        let url = "";
        let config={};
        if(payload===null){
         url = `${baseUrl}/api/checkout/cart/coupon`
       config = {
        method: 'DELETE',
        url: url,
        headers: { 
          Accept: 'application/json'
        }
      };
        }else{
           url = `${baseUrl}/api/checkout/cart/coupon?token=true`
          config = {
            method: 'DELETE',
            url: url,
            headers: { 
              Accept: 'application/json',
              Authorization:`Bearer `+payload
            }
        }
      }
       
      
      const code_remove = await axios(config);
      // console.log(code_remove,"code_remove");
      return code_remove.data;
        } catch (error:any) {
          
          // console.log(error);
          
          return error.response.data;
        }
    }


    export const deliveryTypeChange = async (payload: any) =>{
      try {
        
        let url = "";
        let config={};
        if(payload===null){
         url = `${baseUrl}/api/update-shipping-type/${payload.id}/${payload.type}`
       config = {
        method: 'GET',
        url: url,
        headers: { 
          Accept: 'application/json'
        },
       
      };
        }else{
           url = `${baseUrl}/api/update-shipping-type/${payload.id}/${payload.type}?token=true`
          config = {
            method: 'GET',
            url: url,
            headers: { 
              Accept: 'application/json',
              Authorization:`Bearer `+payload.token
            },
          
        }
      }
       
      // console.log(config);
      
      const code_remove = await axios(config);
      // console.log(code_remove,"code_remove");
      return code_remove.data;
        } catch (error:any) {
          
          // console.log(error);
          
          return error.response.data;
        }
    }


    export const deleteCartItems = async (payload: any) =>{
      try {
        
        let url = "";
        let config={};
        if(payload===null){
         url = `${baseUrl}/api/checkout/cart-list/delete-selected-items`
       config = {
        method: 'POST',
        url: url,
        headers: { 
          Accept: 'application/json'
        },
        data:{selectedIds:payload.items}
      };
        }else{
           url = `${baseUrl}/api/checkout/cart-list/delete-selected-items?token=true`
          config = {
            method: 'POST',
            url: url,
            headers: { 
              Accept: 'application/json',
              Authorization:`Bearer `+payload.token
            },
            data:{selectedIds:payload.items}
        }
      }
       
      // console.log(config);
      
      const code_remove = await axios(config);
      // console.log(code_remove,"code_remove");
      return code_remove.data;
        } catch (error:any) {
          
          // console.log(error);
          
          return error.response.data;
        }
    }





