import type {
  ExemptionCode,
  ExemptionTier,
  NafEligibility,
} from "@/lib/simulateur/types";

// ============================================================================
// Taux normal d'accise sur l'électricité (à compter du 1er février 2026)
// Source : CIBS art. L.312-35 — LF 2026 n° 2026-103 du 19/02/2026, art. 71
// ============================================================================

export const NORMAL_RATE = 26.58; // €/MWh (entreprises, puissance > 36 kVA)

// ============================================================================
// Tiers d'exonération et taux réduits — codification officielle 2040-TIC-VA-E
// Sources :
//   - CIBS art. L.312-31 à L.312-79
//   - Formulaires 2040-TIC-VA-E, 2040-TIC-ATT-E, 2040-TIC-ERA-G (impots.gouv.fr)
//   - BOFIP BOI-RES-EAT-000240-20251231
//   - Arrêté 18/12/2025 (NOR ECOE2532379A) — secteurs exposés à fuite de carbone
// ============================================================================

export const EXEMPTION_TIERS: ExemptionTier[] = [
  // ── Exonérations totales (rate 0) ────────────────────────────────────────

  {
    code: "E01",
    label: "Production d'électricité",
    shortLabel: "Production",
    rate: 0,
    savingsPercent: 100,
    isFullExemption: true,
    conditions: [
      {
        type: "naf_match",
        description:
          "Électricité utilisée pour la production d'électricité (centrales, cogénération) ou pour maintenir la capacité de production",
        nafPrefixes: ["35.11"],
      },
    ],
    legalReference: "Art. L.312-32 CIBS",
  },
  {
    code: "E05",
    label: "Production de produits énergétiques",
    shortLabel: "Prod. énergétiques",
    rate: 0,
    savingsPercent: 100,
    isFullExemption: true,
    conditions: [
      {
        type: "naf_match",
        description:
          "Électricité consommée dans un établissement produisant des produits énergétiques",
        nafPrefixes: ["19.20", "35.2"],
      },
    ],
    legalReference: "Art. L.312-31 CIBS",
  },
  {
    code: "E06",
    label: "Électricité à bord de bateaux",
    shortLabel: "Bateaux",
    rate: 0,
    savingsPercent: 100,
    isFullExemption: true,
    conditions: [
      {
        type: "naf_match",
        description: "Électricité produite à bord de bateaux",
        nafPrefixes: ["50."],
      },
    ],
    legalReference: "Art. L.312-57 CIBS",
  },
  {
    code: "E07",
    label: "Autoconsommation (puissance < 1 000 kW)",
    shortLabel: "Autoconsommation",
    rate: 0,
    savingsPercent: 100,
    isFullExemption: true,
    conditions: [
      {
        type: "power_threshold",
        description:
          "Puissance installée de production inférieure à 1 000 kW en autoconsommation",
        maxPowerKW: 1000,
      },
    ],
    legalReference: "Art. L.312-79 CIBS",
  },
  {
    code: "E22",
    label: "Stockage d'énergie — restitution au réseau",
    shortLabel: "Stockage → réseau",
    rate: 0,
    savingsPercent: 100,
    isFullExemption: true,
    conditions: [
      {
        type: "naf_match",
        description:
          "Électricité entrée dans une installation de stockage puis restituée au réseau (éviter la double imposition)",
        nafPrefixes: ["35."],
      },
    ],
    legalReference: "Art. L.312-78 CIBS",
  },
  {
    code: "E26",
    label: "Production très intensive en électricité (coût élec > 50 % coût produit)",
    shortLabel: "Production très intensive",
    rate: 0,
    savingsPercent: 100,
    isFullExemption: true,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electricity_cost_ratio",
        description:
          "Le coût de l'électricité représente plus de 50 % du coût du produit fabriqué",
        minElectricityCostRatio: 50,
      },
    ],
    legalReference: "Art. L.312-68 CIBS",
  },

  // ── Double usage / procédés industriels spécifiques (taux plancher UE) ───

  {
    code: "E02",
    label: "Procédés métallurgiques, réduction chimique, électrolyse",
    shortLabel: "Métallurgie",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité relevant des procédés métallurgiques, d'électrolyse ou de réduction chimique",
        nafPrefixes: ["24."],
      },
    ],
    legalReference: "Art. L.312-66 CIBS",
  },
  {
    code: "E03",
    label: "Chimie double usage (électrolyse comme matière première)",
    shortLabel: "Électrolyse",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Électricité utilisée comme matière première dans un procédé d'électrolyse (chlore-soude, etc.)",
        nafPrefixes: ["20.13"],
      },
    ],
    legalReference: "Art. L.312-66 CIBS",
  },
  {
    code: "E04",
    label: "Produits minéraux non métalliques (division 23 NACE)",
    shortLabel: "Minéraux",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Fabrication de produits minéraux non métalliques (verre, ciment, céramique)",
        nafPrefixes: ["23."],
      },
    ],
    legalReference: "Art. L.312-67 CIBS",
  },

  // ── Taux réduits industriels sans fuite carbone (L.312-71) ───────────────

  {
    code: "E08",
    label: "Activité industrielle — électro-intensive",
    shortLabel: "Industrie électro-intensive",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description:
          "Électro-intensité ≥ 6,75 % (tarif de référence × consommation / valeur ajoutée)",
        minElectroIntensity: 6.75,
      },
    ],
    legalReference: "Art. L.312-71 CIBS",
  },
  {
    code: "E09",
    label: "Activité industrielle — électro-sensible",
    shortLabel: "Industrie électro-sensible",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 3,375 %",
        minElectroIntensity: 3.375,
      },
    ],
    legalReference: "Art. L.312-71 CIBS",
  },
  {
    code: "E10",
    label: "Activité industrielle — grande consommatrice",
    shortLabel: "Industrie grande conso.",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 0,5 %",
        minElectroIntensity: 0.5,
      },
    ],
    legalReference: "Art. L.312-71 CIBS",
  },

  // ── Taux réduits industriels + fuite de carbone (L.312-72) ───────────────

  {
    code: "E11",
    label: "Secteur exposé concurrence internationale — électro-intensive",
    shortLabel: "Concurrence int. électro-intensive",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 6,75 %",
        minElectroIntensity: 6.75,
      },
      {
        type: "carbon_leakage",
        description:
          "Secteur figurant sur la liste de l'arrêté du 18/12/2025 (fuite de carbone)",
        requiresCarbonLeakage: true,
      },
    ],
    legalReference: "Art. L.312-72 CIBS",
  },
  {
    code: "E12",
    label: "Secteur exposé concurrence internationale — électro-sensible",
    shortLabel: "Concurrence int. électro-sensible",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 3,375 %",
        minElectroIntensity: 3.375,
      },
      {
        type: "carbon_leakage",
        description:
          "Secteur figurant sur la liste de l'arrêté du 18/12/2025 (fuite de carbone)",
        requiresCarbonLeakage: true,
      },
    ],
    legalReference: "Art. L.312-72 CIBS",
  },
  {
    code: "E13",
    label: "Secteur exposé concurrence internationale — grande consommatrice",
    shortLabel: "Concurrence int. grande conso.",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 0,5 %",
        minElectroIntensity: 0.5,
      },
      {
        type: "carbon_leakage",
        description:
          "Secteur figurant sur la liste de l'arrêté du 18/12/2025 (fuite de carbone)",
        requiresCarbonLeakage: true,
      },
    ],
    legalReference: "Art. L.312-72 CIBS",
  },
  {
    code: "E14",
    label: "Secteur exposé concurrence internationale — hyper électro-intensive",
    shortLabel: "Concurrence int. hyper",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 13,5 % (hyper électro-intensité)",
        minElectroIntensity: 13.5,
      },
      {
        type: "carbon_leakage",
        description:
          "Secteur figurant sur la liste de l'arrêté du 18/12/2025 (fuite de carbone)",
        requiresCarbonLeakage: true,
      },
    ],
    legalReference: "Art. L.312-72 CIBS",
  },
  {
    code: "E14b",
    label: "Ultra électro-intensive (≥ 13,5 %) sans condition fuite carbone",
    shortLabel: "Ultra électro-intensive",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 13,5 %",
        minElectroIntensity: 13.5,
      },
    ],
    legalReference: "Art. L.312-71 CIBS",
  },

  // ── Taux réduits — transports et infrastructures (L.312-65 / L.312-79) ───

  {
    code: "E15",
    label: "Transport ferroviaire",
    shortLabel: "Ferroviaire",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Transport de personnes et marchandises par train, métro, tramway, câble, trolleybus",
        nafPrefixes: ["49.10", "49.20", "49.31"],
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E16",
    label: "Data centers (> 1 GWh/an)",
    shortLabel: "Data centers",
    rate: 12.0,
    savingsPercent: 55,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description: "Hébergement de données et activités connexes",
        nafPrefixes: ["63.11"],
      },
      {
        type: "consumption_min",
        description: "Consommation annuelle supérieure à 1 GWh",
        minConsumptionGWh: 1,
      },
      {
        type: "electro_intensity",
        description:
          "Électro-intensité ≥ 2,25 % (condition d'éco-conditionnalité)",
        minElectroIntensity: 2.25,
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E17",
    label: "Aérodromes ouverts à la circulation publique",
    shortLabel: "Aérodromes",
    rate: 5.5,
    savingsPercent: 79,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Aérodromes ouverts à la circulation aérienne publique",
        nafPrefixes: ["52.23"],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 0,5 %",
        minElectroIntensity: 0.5,
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E18",
    label: "Transport collectif routier de personnes",
    shortLabel: "Transport collectif",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description: "Transport collectif routier de personnes",
        nafPrefixes: ["49.39"],
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E19",
    label: "Alimentation électrique à quai",
    shortLabel: "Alimentation quai",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Alimentation électrique à quai d'engins flottants commerciaux ou des autorités publiques",
        nafPrefixes: ["50."],
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E20",
    label: "Installations de stockage d'énergie",
    shortLabel: "Stockage énergie",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Installations de stockage d'énergie (batteries, STEP, etc.)",
        nafPrefixes: ["35."],
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E21",
    label: "Manutention portuaire",
    shortLabel: "Ports",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description: "Manutention portuaire",
        nafPrefixes: ["52.24"],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 0,5 %",
        minElectroIntensity: 0.5,
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },

  // ── Activités non-industrielles éligibles (L.312-65) ─────────────────────

  {
    code: "E23",
    label: "Activités grandes consommatrices d'électricité",
    shortLabel: "Grande conso. (non-ind.)",
    rate: 5.5,
    savingsPercent: 79,
    isFullExemption: false,
    conditions: [
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 0,5 %",
        minElectroIntensity: 0.5,
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E24",
    label: "Activités électro-sensibles",
    shortLabel: "Électro-sensible",
    rate: 3.0,
    savingsPercent: 89,
    isFullExemption: false,
    conditions: [
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 2,25 %",
        minElectroIntensity: 2.25,
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },
  {
    code: "E25",
    label: "Activités électro-intensives",
    shortLabel: "Électro-intensif",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 6,75 %",
        minElectroIntensity: 6.75,
      },
    ],
    legalReference: "Art. L.312-65 CIBS",
  },

  // ── Taux réduits sectoriels spécifiques (L.312-79) ───────────────────────

  {
    code: "E27",
    label: "Infrastructures de recharge véhicules électriques (IRVE) ouvertes au public",
    shortLabel: "IRVE publique",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Points de recharge de véhicules électriques ouverts au public (opérateurs de mobilité)",
        nafPrefixes: ["47.30", "52.21", "77.11"],
      },
    ],
    legalReference: "Art. L.312-79 CIBS",
  },
  {
    code: "E28",
    label: "Production d'hydrogène bas-carbone",
    shortLabel: "Hydrogène bas-carbone",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Électricité utilisée pour la production d'hydrogène bas-carbone ou renouvelable labellisé",
        nafPrefixes: ["20.11", "35.2"],
      },
    ],
    legalReference: "Art. L.312-79 CIBS",
  },
  {
    code: "E29",
    label: "Serres agricoles sous éclairage et chauffage",
    shortLabel: "Agriculture serriste",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Serres agricoles, horticulture sous éclairage artificiel, maraîchage intensif",
        nafPrefixes: ["01.13", "01.19", "01.25", "01.30"],
      },
    ],
    legalReference: "Art. L.312-79 CIBS",
  },
  {
    code: "E30",
    label: "Activités industrielles exposées à la concurrence internationale",
    shortLabel: "Industrie exposée int.",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description:
          "Activité industrielle (sections B, C, D, E NACE)",
        nafPrefixes: [
          "05.", "06.", "07.", "08.", "09.",
          "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
          "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
          "30.", "31.", "32.", "33.",
          "35.", "36.", "37.", "38.", "39.",
        ],
      },
      {
        type: "electro_intensity",
        description: "Électro-intensité ≥ 0,5 %",
        minElectroIntensity: 0.5,
      },
      {
        type: "carbon_leakage",
        description:
          "Secteur figurant sur la liste de l'arrêté du 18/12/2025 (fuite de carbone)",
        requiresCarbonLeakage: true,
      },
    ],
    legalReference: "Art. L.312-72 CIBS",
  },
  {
    code: "E31",
    label: "Pêche et aquaculture",
    shortLabel: "Pêche/aquaculture",
    rate: 0.5,
    savingsPercent: 98,
    isFullExemption: false,
    conditions: [
      {
        type: "naf_match",
        description: "Pêche maritime, aquaculture, pisciculture",
        nafPrefixes: ["03."],
      },
    ],
    legalReference: "Art. L.312-79 CIBS",
  },
];

// ============================================================================
// Mapping NAF → exonérations potentielles
// Détermine quels tiers sont candidats pour un préfixe NAF donné.
// Les tiers génériques E14b / E23 / E24 / E25 / E26 sont systématiquement
// testés en fallback par le moteur (calculate-exemption.ts), donc pas besoin
// de les dupliquer ici pour chaque entrée.
// ============================================================================

/** Codes NAF industriels (sections B/C/D/E NACE) qualifiant pour E08–E14 + E30 + E26 */
const INDUSTRIAL_EXEMPTIONS: ExemptionCode[] = [
  "E08", "E09", "E10",
  "E11", "E12", "E13", "E14",
  "E30",
];

export const NAF_ELIGIBILITY_MAP: NafEligibility[] = [
  // ── Pêche / Aquaculture ───────────────────────────────────────────────────
  { nafPrefix: "03.", potentialExemptions: ["E31"] },

  // ── Agriculture serriste ──────────────────────────────────────────────────
  { nafPrefix: "01.13", potentialExemptions: ["E29"] },
  { nafPrefix: "01.19", potentialExemptions: ["E29"] },
  { nafPrefix: "01.25", potentialExemptions: ["E29"] },
  { nafPrefix: "01.30", potentialExemptions: ["E29"] },

  // ── Industries extractives (section B : 05-09) ────────────────────────────
  { nafPrefix: "05.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "06.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "07.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "08.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "09.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // ── Industries manufacturières (section C : 10-33) ────────────────────────
  // Agroalimentaire & boissons
  { nafPrefix: "10.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "11.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "12.", potentialExemptions: INDUSTRIAL_EXEMPTIONS }, // tabac

  // Textile / Habillement / Cuir
  { nafPrefix: "13.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "14.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "15.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // Bois, papier, imprimerie
  { nafPrefix: "16.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "17.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "18.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // Raffinage / cokéfaction
  {
    nafPrefix: "19.20",
    potentialExemptions: ["E05", ...INDUSTRIAL_EXEMPTIONS],
    autoQualify: true,
  },
  { nafPrefix: "19.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // Chimie double usage (électrolyse) — E03 auto-qualifiant
  {
    nafPrefix: "20.13",
    potentialExemptions: ["E03", "E28", ...INDUSTRIAL_EXEMPTIONS],
  },
  {
    nafPrefix: "20.1",
    potentialExemptions: ["E03", "E28", ...INDUSTRIAL_EXEMPTIONS],
  },
  // Autres chimie
  {
    nafPrefix: "20.",
    potentialExemptions: ["E28", ...INDUSTRIAL_EXEMPTIONS],
  },

  // Pharmaceutique
  { nafPrefix: "21.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // Plasturgie / caoutchouc
  { nafPrefix: "22.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // Produits minéraux non métalliques (verre, ciment, céramique) — E04 auto
  {
    nafPrefix: "23.",
    potentialExemptions: ["E04", ...INDUSTRIAL_EXEMPTIONS],
    autoQualify: true,
  },

  // Métallurgie — E02 auto-qualifiant
  {
    nafPrefix: "24.",
    potentialExemptions: ["E02", ...INDUSTRIAL_EXEMPTIONS],
    autoQualify: true,
  },

  // Produits métalliques, électronique, équipements, machines, véhicules
  { nafPrefix: "25.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "26.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "27.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "28.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "29.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "30.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "31.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "32.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "33.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // ── Production et distribution d'énergie (section D : 35) ─────────────────
  {
    nafPrefix: "35.11",
    potentialExemptions: ["E01", "E20", "E22"],
    autoQualify: true,
  },
  {
    nafPrefix: "35.2",
    potentialExemptions: ["E05", "E20", "E22", "E28"],
  },
  {
    nafPrefix: "35.",
    potentialExemptions: ["E20", "E22", ...INDUSTRIAL_EXEMPTIONS],
  },

  // ── Eau / Déchets (section E : 36-39) ─────────────────────────────────────
  { nafPrefix: "36.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "37.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "38.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },
  { nafPrefix: "39.", potentialExemptions: INDUSTRIAL_EXEMPTIONS },

  // ── Construction / BTP (section F : 41-43) ────────────────────────────────
  // Non industriels → fallback générique E23/E24/E25 uniquement
  { nafPrefix: "41.", potentialExemptions: [] },
  { nafPrefix: "42.", potentialExemptions: [] },
  { nafPrefix: "43.", potentialExemptions: [] },

  // ── Commerce (section G : 45-47) ──────────────────────────────────────────
  { nafPrefix: "47.30", potentialExemptions: ["E27"] },
  { nafPrefix: "47.", potentialExemptions: [] },

  // ── Transports (section H : 49-53) ────────────────────────────────────────
  { nafPrefix: "49.10", potentialExemptions: ["E15"] },
  { nafPrefix: "49.20", potentialExemptions: ["E15"] },
  { nafPrefix: "49.31", potentialExemptions: ["E15"] },
  { nafPrefix: "49.39", potentialExemptions: ["E18"] },
  { nafPrefix: "50.", potentialExemptions: ["E06", "E19"] },
  { nafPrefix: "52.21", potentialExemptions: ["E27"] },
  { nafPrefix: "52.22", potentialExemptions: [] },
  { nafPrefix: "52.23", potentialExemptions: ["E17"] },
  { nafPrefix: "52.24", potentialExemptions: ["E21"] },

  // ── Hôtellerie / Restauration (section I : 55-56) ─────────────────────────
  { nafPrefix: "55.", potentialExemptions: [] },
  { nafPrefix: "56.", potentialExemptions: [] },

  // ── Data centers (section J : 63.11) ──────────────────────────────────────
  {
    nafPrefix: "63.11",
    potentialExemptions: ["E16"],
  },

  // ── Mobilité / location (section N : 77) ──────────────────────────────────
  { nafPrefix: "77.11", potentialExemptions: ["E27"] },

  // ── Administration publique / Enseignement / Santé (sections O-Q) ─────────
  // Éligibles aux tiers génériques E23/E24/E25 via fallback
  { nafPrefix: "84.", potentialExemptions: [] },
  { nafPrefix: "85.", potentialExemptions: [] },
  { nafPrefix: "86.", potentialExemptions: [] },
  { nafPrefix: "87.", potentialExemptions: [] },
  { nafPrefix: "88.", potentialExemptions: [] },

  // ── Arts / Sports / Loisirs (section R : 90-93) ───────────────────────────
  { nafPrefix: "93.", potentialExemptions: [] }, // piscines, centres thermaux
];

// ============================================================================
// Helpers
// ============================================================================

/** Trouve l'entrée la plus spécifique pour un code NAF (préfixe le plus long) */
export function getEligibilityForNaf(nafCode: string): NafEligibility | null {
  const sorted = [...NAF_ELIGIBILITY_MAP].sort(
    (a, b) => b.nafPrefix.length - a.nafPrefix.length,
  );
  return sorted.find((e) => nafCode.startsWith(e.nafPrefix)) ?? null;
}

export function getExemptionTier(code: ExemptionCode): ExemptionTier | undefined {
  return EXEMPTION_TIERS.find((t) => t.code === code);
}

/** Codes NAF préfixes considérés comme "industriels" (B/C/D/E NACE) */
export const INDUSTRIAL_NAF_PREFIXES = [
  "05.", "06.", "07.", "08.", "09.",
  "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.",
  "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.",
  "30.", "31.", "32.", "33.",
  "35.", "36.", "37.", "38.", "39.",
];

export function isIndustrialNaf(nafCode: string): boolean {
  return INDUSTRIAL_NAF_PREFIXES.some((p) => nafCode.startsWith(p));
}
