export type Calidad = 'basica' | 'media' | 'premium';
export type Unidad = 'm2' | 'ml' | 'ud';
export type CategoriaMaterial = 'suelo' | 'pared' | 'pintura' | 'mobiliario';
export type TipoReforma = 'cocina' | 'bano' | 'salon' | 'comedor' | 'integral' | 'otro';

export type PartidaKey =
  | 'demolicion'
  | 'alicatado'
  | 'fontaneria'
  | 'electricidad'
  | 'carpinteria'
  | 'mano_de_obra'
  | 'extras'
  | 'licencia';

export type ManoObraKey = 'demolicion' | 'fontaneria' | 'electricidad' | 'mano_de_obra';

export interface CatalogItem {
  id: string;
  categoria: CategoriaMaterial;
  nombre: string;
  calidad: Calidad;
  precioUnit: number; // céntimos por unidad
  unidad: Unidad;
  descriptorRender: string;
  esDefault: boolean;
  sku: string;
}

export interface PricingConfig {
  alturaTechoDefault: number; // metros
  factorZona: Record<string, number>; // provincia -> multiplicador
  manoObra: Record<ManoObraKey, number>; // céntimos por m² de suelo
}

export interface BudgetInputs {
  tipoReforma: TipoReforma;
  m2Suelo: number | null;
  alturaTecho: number | null;
  calidadGlobal: Calidad;
  estructural: boolean;
  provincia: string | null;
  materialSelections: Partial<Record<CategoriaMaterial, string>>; // categoria -> catalogItemId
}

export interface PartidaResult {
  key: PartidaKey;
  label: string;
  importe: number; // céntimos (base, antes de factor zona)
}

export interface BudgetResult {
  partidas: PartidaResult[];
  subtotal: number; // céntimos
  factorZona: number;
  total: number; // céntimos = round(subtotal * factorZona)
  rango: { min: number; max: number }; // céntimos
  confianza: 'baja' | 'media' | 'alta';
  materialesRender: string[]; // descriptores para el prompt del render
  avisos: string[];
}
