/* ============================================================
   TERRITORIO — capa de adaptación por Comunidad Autónoma
   Additive: se conecta al perfil RGPD existente (store.jsx).
   ============================================================ */

const TERRITORIES = {
  'Andalucía':          { url: 'https://www.juntadeandalucia.es/agenciatributariadeandalucia', hacienda: 'Agencia Tributaria de Andalucía' },
  'Aragón':             { url: 'https://www.aragon.es/-/tributos', hacienda: 'Tributos del Gobierno de Aragón' },
  'Asturias':           { url: 'https://www.tributasenasturias.es', hacienda: 'Ente Público de Servicios Tributarios de Asturias' },
  'Islas Baleares':     { url: 'https://www.atib.es', hacienda: 'Agència Tributària de les Illes Balears (ATIB)' },
  'Canarias':           { url: 'https://www.gobiernodecanarias.org/tributos/', hacienda: 'Agencia Tributaria Canaria' },
  'Cantabria':          { url: 'https://www.cantabria.es', hacienda: 'Agencia Cántabra de Administración Tributaria' },
  'Castilla-La Mancha': { url: 'https://tributos.castillalamancha.es', hacienda: 'Tributos de Castilla-La Mancha' },
  'Castilla y León':    { url: 'https://tributos.jcyl.es', hacienda: 'Tributos de la Junta de Castilla y León' },
  'Cataluña':           { url: 'https://atc.gencat.cat', hacienda: 'Agència Tributària de Catalunya (ATC)' },
  'Comunidad Valenciana': { url: 'https://atv.gva.es', hacienda: 'Agència Tributària Valenciana (ATV)' },
  'Extremadura':        { url: 'https://portaltributario.juntaex.es', hacienda: 'Portal Tributario de Extremadura' },
  'Galicia':            { url: 'https://www.atriga.gal', hacienda: 'Axencia Tributaria de Galicia (ATRIGA)' },
  'Madrid':             { url: 'https://www.comunidad.madrid/servicios/administracion-electronica-punto-acceso-general/tributos', hacienda: 'Tributos de la Comunidad de Madrid' },
  'Murcia':             { url: 'https://agenciatributaria.carm.es', hacienda: 'Agencia Tributaria de la Región de Murcia' },
  'Navarra':            { url: 'https://hacienda.navarra.es', hacienda: 'Hacienda Foral de Navarra', foral: true },
  'País Vasco':         { url: 'https://www.euskadi.eus/hacienda/', hacienda: 'Haciendas Forales (Álava, Bizkaia, Gipuzkoa)', foral: true },
  'La Rioja':           { url: 'https://www.larioja.org/tributos', hacienda: 'Tributos del Gobierno de La Rioja' },
  'Ceuta':              { url: 'https://www.ceuta.es', hacienda: 'Servicios Tributarios de Ceuta' },
  'Melilla':            { url: 'https://www.melilla.es', hacienda: 'Servicios Tributarios de Melilla' },
};

function lxUserCCAA() {
  const p = lxProfileLoad();
  return (p.consent.region && p.data.region && p.data.region.ccaa) ? p.data.region.ccaa : null;
}

/* ---------- Badge "Adaptado a [CCAA]" con popover ---------- */
function TerritoryBadge() {
  const profile = useProfile();
  const ccaa = (profile.consent.region && profile.data.region && profile.data.region.ccaa) || null;
  const [open, setOpen] = useState(false);
  if (!ccaa) return null;
  const terr = TERRITORIES[ccaa] || {};

  const changeCCAA = (v) => { if (v) lxSetProfileData('region', 'ccaa', v); };

  return (
    <div className="terr-wrap">
      <button className={'terr-badge' + (open ? ' open' : '')} onClick={() => setOpen(o => !o)} title="Contenido adaptado a tu comunidad">
        <Icon name="globe" size={12} /> Adaptado a {ccaa}
        {terr.foral && <span className="terr-foral-dot" title="Régimen foral"></span>}
      </button>
      {open && (
        <>
          <div className="terr-scrim" onClick={() => setOpen(false)}></div>
          <div className="terr-pop fade-up">
            <div className="tp-head"><Icon name="globe" size={15} /> Adaptado a {ccaa}</div>
            <p className="tp-text">Lexly tiene en cuenta la normativa fiscal y jurídica de <b>{ccaa}</b> al responderte. Cuando una norma varía según la comunidad, prioriza la de tu territorio.</p>
            {terr.foral && (
              <div className="tp-foral"><Icon name="warn" size={13} /> {ccaa} tiene <b>régimen foral</b> propio. Su fiscalidad difiere de la estatal.</div>
            )}
            <label className="tp-label">Cambiar de comunidad</label>
            <select className="select tp-select" value={ccaa} onChange={e => changeCCAA(e.target.value)}>
              {CCAA.map(c => <option key={c} value={c}>{c}</option>)}
            </select>
            {terr.url && (
              <a className="tp-link" href={terr.url} target="_blank" rel="noopener noreferrer">
                <Icon name="shield" size={12} /> {terr.hacienda || 'Hacienda autonómica'}
                <Icon name="arrowRight" size={11} />
              </a>
            )}
            <p className="tp-disc">Información orientativa. Verifica siempre en la fuente oficial autonómica.</p>
          </div>
        </>
      )}
      <style>{`
        .terr-wrap { position: relative; display: inline-block; }
        .terr-badge { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 500; color: var(--violet-soft); background: var(--violet-dim); border: 1px solid var(--violet-line); padding: 5px 11px; border-radius: 20px; transition: background .15s; }
        .terr-badge:hover, .terr-badge.open { background: rgba(124,58,237,0.22); }
        .terr-badge .ic { color: var(--violet-soft); }
        .terr-foral-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--amber); box-shadow: 0 0 6px var(--amber); }
        .terr-scrim { position: fixed; inset: 0; z-index: 60; }
        .terr-pop { position: absolute; top: calc(100% + 8px); left: 0; z-index: 61; width: 290px; background: var(--surface-2); border: 1px solid var(--line-2); border-radius: 13px; box-shadow: var(--shadow-lg); padding: 15px; }
        .tp-head { display: flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: 600; color: var(--white); margin-bottom: 8px; }
        .tp-head .ic { color: var(--violet-soft); }
        .tp-text { font-size: 12.5px; color: var(--text-2); line-height: 1.5; margin-bottom: 12px; }
        .tp-text b { color: var(--text); font-weight: 600; }
        .tp-foral { display: flex; align-items: flex-start; gap: 7px; font-size: 12px; color: var(--amber); background: var(--amber-dim); border: 1px solid rgba(251,191,36,0.25); border-radius: 9px; padding: 8px 10px; margin-bottom: 12px; line-height: 1.4; }
        .tp-foral .ic { flex-shrink: 0; margin-top: 1px; }
        .tp-foral b { color: #ffd87a; }
        .tp-label { display: block; font-size: 11px; font-weight: 600; color: var(--text-3); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 6px; }
        .tp-select { font-size: 13px; padding: 9px 12px; }
        .tp-link { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--violet-soft); margin-top: 12px; }
        .tp-link:hover { color: var(--violet-bright); }
        .tp-disc { font-size: 10.5px; color: var(--text-4); margin-top: 12px; line-height: 1.4; padding-top: 10px; border-top: 1px solid var(--line); }
      `}</style>
    </div>
  );
}

/* ---------- Aviso de régimen foral (alertas) ---------- */
function ForalNotice({ ccaa }) {
  const terr = TERRITORIES[ccaa];
  if (!terr || !terr.foral) return null;
  return (
    <div className="foral-notice">
      <div className="fn-ic"><Icon name="warn" size={18} /></div>
      <div className="fn-text">
        <strong>{ccaa}: régimen foral propio</strong>
        <span>Tu territorio se rige por su hacienda foral, no por la AEAT estatal. Los modelos, plazos y tipos pueden diferir de los de territorio común. Consulta tu administración foral para los trámites concretos.</span>
        <a href={terr.url} target="_blank" rel="noopener noreferrer">{terr.hacienda} <Icon name="arrowRight" size={12} /></a>
      </div>
      <style>{`
        .foral-notice { display: flex; gap: 14px; align-items: flex-start; background: linear-gradient(180deg, var(--amber-dim), transparent); border: 1px solid rgba(251,191,36,0.28); border-radius: 14px; padding: 16px 18px; margin: 24px 0 0; }
        .fn-ic { width: 38px; height: 38px; border-radius: 10px; background: rgba(251,191,36,0.14); display: grid; place-items: center; color: var(--amber); flex-shrink: 0; }
        .fn-text strong { display: block; font-size: 14px; font-weight: 600; color: #ffd87a; margin-bottom: 4px; }
        .fn-text span { font-size: 13px; color: var(--text-2); line-height: 1.55; }
        .fn-text a { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: var(--amber); margin-top: 9px; }
        .fn-text a:hover { text-decoration: underline; }
      `}</style>
    </div>
  );
}

/* ---------- Tributos autonómicos (generados por IA, bajo demanda) ---------- */
async function generateTerritorial(ccaa) {
  const terr = TERRITORIES[ccaa] || {};
  const prompt = `Resume de forma clara y concisa los tributos y particularidades fiscales AUTONÓMICAS relevantes para un contribuyente en ${ccaa} (España). Cubre, con viñetas "-" y **negritas**:
- Tramos autonómicos del IRPF (sin cifras exactas si no estás seguro; indica que el tramo autonómico se suma al estatal).
- Impuestos cedidos: Sucesiones y Donaciones, Transmisiones Patrimoniales y AJD, Patrimonio (menciona si hay bonificaciones autonómicas destacables).
- Deducciones autonómicas del IRPF más habituales en ${ccaa}.
${terr.foral ? '- Indica claramente que ' + ccaa + ' tiene RÉGIMEN FORAL propio y su sistema difiere del de territorio común.' : ''}
Sé breve (máximo ~400 palabras). No inventes cuantías concretas; cuando menciones importes o porcentajes, recuerda que deben verificarse en la fuente oficial.`;
  const sys = 'Eres un experto en fiscalidad autonómica española. Generas resúmenes claros y orientativos de la fiscalidad de cada comunidad autónoma. No inventas cifras exactas; cuando las mencionas, adviertes que deben verificarse. Usas lenguaje claro.';
  return await callLexly(prompt, sys, 3000);
}

function TerritorialTaxes({ ccaa }) {
  const terr = TERRITORIES[ccaa] || {};
  const cacheKey = 'auto-' + ccaa;
  const [state, setState] = useState('idle');
  const [content, setContent] = useState(null);
  const [date, setDate] = useState(null);

  useEffect(() => {
    const cached = lxFicheGet(cacheKey);
    if (cached && cached.content) { setContent(cached.content); setDate(cached.date); setState('done'); }
    else { setState('idle'); setContent(null); }
  }, [ccaa]);

  const load = async () => {
    setState('loading');
    try {
      const raw = await generateTerritorial(ccaa);
      const d = new Date().toLocaleDateString('es-ES', { day: 'numeric', month: 'long', year: 'numeric' });
      setContent(raw); setDate(d); setState('done');
      lxFicheSet(cacheKey, { content: raw, date: d, generatedAt: Date.now() });
    } catch (e) {
      setState(e.message === 'NO_API' ? 'noapi' : 'error');
    }
  };

  return (
    <div className="terr-taxes card">
      <div className="tt-head">
        <div className="tt-title"><Icon name="building" size={15} /> Tributos autonómicos · {ccaa}</div>
        {state === 'done' && date && <span className="tt-date"><Icon name="clock" size={12} /> {date}</span>}
      </div>

      {state === 'idle' && (
        <div className="tt-idle">
          <p>Consulta los tributos cedidos, tramos autonómicos del IRPF y deducciones propias de <b>{ccaa}</b>, generados por Lexly.</p>
          <button className="btn btn-primary" onClick={load}><Icon name="sparkle" size={15} /> Ver tributos de {ccaa}</button>
        </div>
      )}
      {state === 'loading' && (
        <div className="tt-loading"><Spinner /> <span>Lexly está preparando la fiscalidad autonómica de {ccaa}…</span></div>
      )}
      {(state === 'error' || state === 'noapi') && (
        <div className="tt-error">
          <Icon name="warn" size={15} />
          <span>{state === 'noapi' ? 'No se ha podido conectar con el servicio. Revisa tu conexión e inténtalo de nuevo.' : 'No se ha podido generar. Inténtalo de nuevo.'}</span>
          <button onClick={load}>Reintentar</button>
        </div>
      )}
      {state === 'done' && content && (
        <>
          <div className="tt-body"><Markdown text={content} /></div>
          <button className="tt-regen" onClick={load}><Icon name="sparkle" size={12} /> Regenerar</button>
        </>
      )}

      <div className="tt-transparency">
        <Icon name="warn" size={13} />
        <span>Información <b>orientativa</b>. La fiscalidad autonómica cambia con frecuencia: verifícala en {terr.url ? <a href={terr.url} target="_blank" rel="noopener noreferrer">{terr.hacienda}</a> : 'tu hacienda autonómica'}.</span>
      </div>

      <style>{`
        .terr-taxes { padding: 18px 20px; margin-top: 24px; }
        .tt-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
        .tt-title { display: flex; align-items: center; gap: 9px; font-size: 14px; font-weight: 600; color: var(--white); }
        .tt-title .ic { color: var(--violet-soft); }
        .tt-date { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--text-3); }
        .tt-idle p { font-size: 13px; color: var(--text-2); line-height: 1.55; margin-bottom: 14px; max-width: 560px; }
        .tt-idle b { color: var(--text); font-weight: 600; }
        .tt-loading { display: flex; align-items: center; gap: 11px; font-size: 13px; color: var(--text-2); padding: 8px 0; }
        .tt-error { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--red); }
        .tt-error button { margin-left: auto; color: var(--red); font-weight: 600; text-decoration: underline; }
        .tt-body { border-top: 1px solid var(--line); padding-top: 14px; }
        .tt-regen { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--text-3); font-weight: 500; margin-top: 12px; padding: 5px 9px; border-radius: 7px; transition: .15s; }
        .tt-regen:hover { color: var(--violet-soft); background: var(--violet-dim); }
        .tt-transparency { display: flex; align-items: flex-start; gap: 8px; font-size: 11.5px; color: var(--text-3); line-height: 1.45; margin-top: 14px; padding-top: 13px; border-top: 1px solid var(--line); }
        .tt-transparency .ic { color: var(--amber); flex-shrink: 0; margin-top: 1px; }
        .tt-transparency b { color: var(--text-2); }
        .tt-transparency a { color: var(--violet-soft); font-weight: 600; }
        .tt-transparency a:hover { text-decoration: underline; }
      `}</style>
    </div>
  );
}

Object.assign(window, { TERRITORIES, lxUserCCAA, TerritoryBadge, ForalNotice, TerritorialTaxes, generateTerritorial });
