import { axiosClient } from '@/api/axiosClient'
import type {
  CreatePuntoDeVentaRequest,
  PuntoDeVentaCreated,
  PuntoDeVentaDetail,
  PuntoDeVentaListItem,
  PuntosDeVentaQuery,
  UpdatePuntoDeVentaRequest,
  PagedResult,
} from '../types'

export async function listPuntosDeVenta(
  query: PuntosDeVentaQuery,
): Promise<PagedResult<PuntoDeVentaListItem>> {
  const params = new URLSearchParams()
  if (query.page !== undefined) params.set('page', String(query.page))
  if (query.pageSize !== undefined) params.set('pageSize', String(query.pageSize))
  if (query.medioId !== undefined) params.set('medioId', String(query.medioId))
  if (query.activo !== undefined) params.set('activo', String(query.activo))

  const response = await axiosClient.get<PagedResult<PuntoDeVentaListItem>>(
    '/api/v1/admin/puntos-de-venta',
    { params },
  )
  return response.data
}

export async function getPuntoDeVenta(id: number): Promise<PuntoDeVentaDetail> {
  const response = await axiosClient.get<PuntoDeVentaDetail>(
    `/api/v1/admin/puntos-de-venta/${id}`,
  )
  return response.data
}

export async function createPuntoDeVenta(
  payload: CreatePuntoDeVentaRequest,
): Promise<PuntoDeVentaCreated> {
  const response = await axiosClient.post<PuntoDeVentaCreated>(
    '/api/v1/admin/puntos-de-venta',
    payload,
  )
  return response.data
}

export async function updatePuntoDeVenta(
  id: number,
  payload: UpdatePuntoDeVentaRequest,
): Promise<PuntoDeVentaDetail> {
  const response = await axiosClient.put<PuntoDeVentaDetail>(
    `/api/v1/admin/puntos-de-venta/${id}`,
    payload,
  )
  return response.data
}

export async function deactivatePuntoDeVenta(id: number): Promise<void> {
  await axiosClient.post(`/api/v1/admin/puntos-de-venta/${id}/deactivate`)
}

export async function reactivatePuntoDeVenta(id: number): Promise<void> {
  await axiosClient.post(`/api/v1/admin/puntos-de-venta/${id}/reactivate`)
}
