// ADM-009 — API client tipado para fiscal/iibb
import { axiosClient } from '@/api/axiosClient'
import type {
  IngresosBrutos,
  CreateIngresosBrutosRequest,
  UpdateIngresosBrutosRequest,
  NuevaVersionIngresosBrutosRequest,
  NuevaVersionIibbResponse,
  HistorialCadenaIibbEntry,
  IngresosBrutosFilter,
  PagedResponse,
} from '../types/ingresosBrutos.types'

const BASE = '/api/v1/admin/fiscal/iibb'

export async function listIngresosBrutos(
  params: IngresosBrutosFilter,
): Promise<PagedResponse<IngresosBrutos>> {
  const p = new URLSearchParams()
  if (params.page !== undefined) p.set('page', String(params.page))
  if (params.pageSize !== undefined) p.set('pageSize', String(params.pageSize))
  if (params.provincia !== undefined) p.set('provincia', params.provincia)
  if (params.activo !== undefined) p.set('activo', String(params.activo))

  const res = await axiosClient.get<PagedResponse<IngresosBrutos>>(BASE, { params: p })
  return res.data
}

export async function getIngresosBrutosById(id: number): Promise<IngresosBrutos> {
  const res = await axiosClient.get<IngresosBrutos>(`${BASE}/${id}`)
  return res.data
}

export async function getHistorialIngresosBrutos(id: number): Promise<HistorialCadenaIibbEntry[]> {
  const res = await axiosClient.get<HistorialCadenaIibbEntry[]>(`${BASE}/${id}/historial`)
  return res.data
}

export async function createIngresosBrutos(
  body: CreateIngresosBrutosRequest,
): Promise<IngresosBrutos> {
  const res = await axiosClient.post<IngresosBrutos>(BASE, body)
  return res.data
}

export async function updateIngresosBrutos(
  id: number,
  body: UpdateIngresosBrutosRequest,
): Promise<IngresosBrutos> {
  const res = await axiosClient.patch<IngresosBrutos>(`${BASE}/${id}`, body)
  return res.data
}

export async function nuevaVersionIngresosBrutos(
  id: number,
  body: NuevaVersionIngresosBrutosRequest,
): Promise<NuevaVersionIibbResponse> {
  const res = await axiosClient.post<NuevaVersionIibbResponse>(
    `${BASE}/${id}/nueva-version`,
    body,
  )
  return res.data
}

export async function deactivateIngresosBrutos(id: number): Promise<IngresosBrutos> {
  const res = await axiosClient.post<IngresosBrutos>(`${BASE}/${id}/deactivate`)
  return res.data
}

export async function reactivateIngresosBrutos(id: number): Promise<IngresosBrutos> {
  const res = await axiosClient.post<IngresosBrutos>(`${BASE}/${id}/reactivate`)
  return res.data
}
