import axios, { AxiosInstance, AxiosResponse } from 'axios';
import {
  GetHolderListOptionsParams,
  GetHolderListParams,
} from '@/dto/tagRfid.dto';

export interface ServiceOptions {
  headers?: Record<string, unknown>;
  params?: Record<string, unknown>;
}

export const API = ({
  headers = {},
  params = {},
}: ServiceOptions = {}): AxiosInstance => {
  const user = JSON.parse(localStorage.getItem('user') ?? '{}');
  const BASE_URL = import.meta.env.VITE_APP_TAGSAMURAI_API;

  const instance = axios.create({
    baseURL: `${BASE_URL}/fam/tag/v2/rfid`,
    headers: {
      'Content-type': 'application/json',
      'Authorization': `Bearer ${user.token}`,
      ...headers,
    },
    params,
  });

  return instance;
};

const getHolderList = (
  params?: GetHolderListParams,
): Promise<AxiosResponse> => {
  return API({ params }).get('/holder-list');
};

const getHolderListOptions = (
  params?: GetHolderListOptionsParams,
): Promise<AxiosResponse> => {
  return API({ params }).get('/holder-list/options');
};

export default {
  getHolderList,
  getHolderListOptions,
};
