// ADM-009 — Tipos TS para feature fiscal/iibb
// Alineados con IngresosBrutosDto / FiscalContracts.cs del backend

// Provincias argentinas — 24 jurisdicciones (23 INDEC + CABA)
export type ProvinciaArgentina =
  | 'BuenosAires'
  | 'Catamarca'
  | 'Chaco'
  | 'Chubut'
  | 'CiudadAutonomaDeBuenosAires'
  | 'Corrientes'
  | 'Cordoba'
  | 'EntreRios'
  | 'Formosa'
  | 'Jujuy'
  | 'LaPampa'
  | 'LaRioja'
  | 'Mendoza'
  | 'Misiones'
  | 'Neuquen'
  | 'RioNegro'
  | 'Salta'
  | 'SanJuan'
  | 'SanLuis'
  | 'SantaCruz'
  | 'SantaFe'
  | 'SantiagoDelEstero'
  | 'TierraDelFuego'
  | 'Tucuman'

export const PROVINCIA_DISPLAY: Record<ProvinciaArgentina, string> = {
  BuenosAires: 'Buenos Aires',
  Catamarca: 'Catamarca',
  Chaco: 'Chaco',
  Chubut: 'Chubut',
  CiudadAutonomaDeBuenosAires: 'Ciudad Autónoma de Buenos Aires',
  Corrientes: 'Corrientes',
  Cordoba: 'Córdoba',
  EntreRios: 'Entre Ríos',
  Formosa: 'Formosa',
  Jujuy: 'Jujuy',
  LaPampa: 'La Pampa',
  LaRioja: 'La Rioja',
  Mendoza: 'Mendoza',
  Misiones: 'Misiones',
  Neuquen: 'Neuquén',
  RioNegro: 'Río Negro',
  Salta: 'Salta',
  SanJuan: 'San Juan',
  SanLuis: 'San Luis',
  SantaCruz: 'Santa Cruz',
  SantaFe: 'Santa Fe',
  SantiagoDelEstero: 'Santiago del Estero',
  TierraDelFuego: 'Tierra del Fuego',
  Tucuman: 'Tucumán',
}

export const PROVINCIAS: ProvinciaArgentina[] = Object.keys(PROVINCIA_DISPLAY) as ProvinciaArgentina[]

export interface IngresosBrutos {
  id: number
  provincia: ProvinciaArgentina
  provinciaDisplay: string
  descripcion: string
  alicuota: number
  vigenciaDesde: string      // ISO date "yyyy-MM-dd"
  vigenciaHasta: string | null
  activo: boolean
  predecesorId: number | null
}

export interface CreateIngresosBrutosRequest {
  provincia: ProvinciaArgentina
  descripcion: string
  alicuota: number
  vigenciaDesde: string
}

// UpdateIngresosBrutosRequest — SIN alicuota (inmutable, usar NuevaVersion para cambiar)
export interface UpdateIngresosBrutosRequest {
  descripcion: string
  activo: boolean
}

export interface NuevaVersionIngresosBrutosRequest {
  alicuota: number
  vigenciaDesde: string   // "yyyy-MM-dd"
}

export interface NuevaVersionIibbResponse {
  predecesorId: number
  nuevaId: number
  nuevaAlicuota: number
  vigenciaDesde: string
  predecesorVigenciaHasta: string
}

export interface HistorialCadenaIibbEntry {
  id: number
  provincia: ProvinciaArgentina
  provinciaDisplay: string
  alicuota: number
  vigenciaDesde: string
  vigenciaHasta: string | null
  activo: boolean
  predecesorId: number | null
  depth: number
}

export interface IngresosBrutosFilter {
  page?: number
  pageSize?: number
  provincia?: ProvinciaArgentina
  activo?: boolean
}

export interface PagedResponse<T> {
  items: T[]
  page: number
  pageSize: number
  total: number
}

export interface ApiError {
  error: string
  message: string
}
