import apiClient from "../api-client";
import { OrderDetailsResponseModel } from "../types/models/order";

export default class orderService {
  static createOrder = async (
    payload: Record<string, unknown>
  ) => {
    try {
      const response = await apiClient.post(`/api/order-detail`, payload);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:createOrder`, error);
      throw error;
    }
  };

  static updateOrder = async (
    payload: Record<string, unknown>
  ) => {
    try {
      const response = await apiClient.put(`/api/order-detail/${payload.documentId}`, payload);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:createOrder`, error);
      throw error;
    }
  };

  static getOrderStatus = async (statusKey: string) => {
    try {
      const response = await apiClient.get(`/api/order-statuses?${statusKey}`);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:getOrderStatus`, error);
      throw error;
    }
  };

  static getOrderId = async (token: string) => {
    try {
      const response = await apiClient.get(`/getorderId`, {
        headers: {
          token: token,
        },
      });
      return response.data;
    } catch (error) {
      console.error(`Error in addressService:getOrderId`, error);
      throw error;
    }
  };

  static getShippingQuote = async (payload: Record<string, unknown>) => {
    try {
      const response = await apiClient.post(
        `/api/shipping-methods/shipping-quote`,
        payload
      );
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:getShippingQuote`, error);
      throw error;
    }
  };

  static getTax = async (code: string) => {
    try {
      const response = await apiClient.get(`/api/tax-vat/${code}`);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:getTax`, error);
      throw error;
    }
  };

  static addOrder = async (payload: Record<string, unknown>) => {
    try {
      const response = await apiClient.post(`/api/orders`, payload);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:addOrders`, error);
      throw error;
    }
  };

  static orderMarkAsPaid = async (payload: Record<string, unknown>) => {
    try {
      const response = await apiClient.post(`/api/mark-as-paid`, payload);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:markAsPaid`, error);
      throw error;
    }
  };

  static getOrders = async (orderId: string): Promise<OrderDetailsResponseModel> => {
    try {
      const response = await apiClient.get<OrderDetailsResponseModel>(`/api/order-detail/${orderId}`);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:getOrders`, error);
      throw error;
    }
  };

  static getSingleOrder = async (id: string) => {
    try {
      const response = await apiClient.get(`/api/orders/${id}`);
      return response.data;
    } catch (error) {
      console.error(`Error in orderService:getSingleOrder`, error);
      throw error;
    }
  };
}
