/* store.jsx — estado global de la plataforma YellowBlock
   Router por estado + datos de inmuebles + carrito. Persistencia en localStorage. */

const PF_SERVICES = {
  analisis:    { key: 'analisis',    name: 'Análisis de zona y regulación', price: 499,   stage: 1, unit: 'pago único' },
  inscripcion: { key: 'inscripcion', name: 'Inscripción',                    price: 5000,  stage: 2, unit: 'pago único' },
  gestion:     { key: 'gestion',     name: 'Gestión asistida',               price: 12500, stage: 3, unit: 'desde', range: [10000, 15000] },
};

const PF_REQS = [
  { id: 'uso',     label: 'Uso de suelo', detail: 'Compatible con hospedaje temporal' },
  { id: 'padron',  label: 'Padrón de Anfitriones', detail: 'Registro ante SECTUR CDMX' },
  { id: 'hosp',    label: 'Impuesto sobre Hospedaje 3%', detail: 'Alta y declaración' },
  { id: 'condo',   label: 'Régimen de condominio', detail: 'Reglamento que permita renta' },
  { id: 'pc',      label: 'Protección civil', detail: 'Visto bueno / aviso de funcionamiento' },
];

// fotos placeholder vía gradiente (sin assets externos)
const PF_THUMBS = [
  'linear-gradient(135deg,#F0C46B,#C98A2B)',
  'linear-gradient(135deg,#8Fb6E8,#4A6FA5)',
  'linear-gradient(135deg,#A8C5A0,#5E8B6E)',
  'linear-gradient(135deg,#D7A8C0,#9A5E7E)',
];

function seedProperties() {
  return [
    {
      id: 'p1', name: 'Depto. 402 · Torre Insignia', address: 'Av. Coyoacán 1435, Del Valle',
      alcaldia: 'Benito Juárez', use: 'Airbnb · Renta temporal', thumb: PF_THUMBS[0],
      score: 78, stage: 'inscripcion', status: 'progress',
      owned: { analisis: true, inscripcion: true, gestion: false },
      docs: [
        { name: 'INE_Representante.pdf', type: 'Identificación', kind: 'compliant', sig: 'NOM-151' },
        { name: 'Constancia_Fiscal_2026.pdf', type: 'Fiscal', kind: 'compliant', sig: 'Validado' },
        { name: 'Escritura_14582.pdf', type: 'Propiedad', kind: 'compliant', sig: 'NOM-151' },
        { name: 'Boleta_Predial_2026.pdf', type: 'Predial', kind: 'review', sig: 'OCR' },
        { name: 'Reglamento_Condominio.pdf', type: 'Condominio', kind: 'missing', sig: 'Falta firma' },
      ],
      reqs: { uso: 'ok', padron: 'expired', hosp: 'missing', condo: 'missing', pc: 'ok' },
    },
    {
      id: 'p2', name: 'Casa Roma 88', address: 'Córdoba 88, Roma Norte',
      alcaldia: 'Cuauhtémoc', use: 'Airbnb · Renta temporal', thumb: PF_THUMBS[1],
      score: 94, stage: 'done', status: 'compliant',
      owned: { analisis: true, inscripcion: true, gestion: true },
      docs: [
        { name: 'INE_Titular.pdf', type: 'Identificación', kind: 'compliant', sig: 'NOM-151' },
        { name: 'Escritura_RomaNorte.pdf', type: 'Propiedad', kind: 'compliant', sig: 'NOM-151' },
        { name: 'Alta_Padron.pdf', type: 'Registro', kind: 'compliant', sig: 'Vigente' },
      ],
      reqs: { uso: 'ok', padron: 'ok', hosp: 'ok', condo: 'ok', pc: 'ok' },
    },
  ];
}

function loadState() {
  try {
    const raw = localStorage.getItem('yb_platform_v1');
    if (raw) return JSON.parse(raw);
  } catch (e) {}
  return null;
}
function persist(s) {
  try { localStorage.setItem('yb_platform_v1', JSON.stringify(s)); } catch (e) {}
}

function useStore() {
  const saved = loadState();
  const [authed, setAuthed] = React.useState(saved ? saved.authed : false);
  const [screen, setScreen] = React.useState(saved ? saved.screen : 'dashboard');
  const [activeProp, setActiveProp] = React.useState(saved ? saved.activeProp : 'p1');
  const [properties, setProperties] = React.useState(saved ? saved.properties : seedProperties());
  const [user, setUser] = React.useState(saved ? saved.user : null);
  const [checkout, setCheckout] = React.useState(null); // { propId, service }

  React.useEffect(() => {
    persist({ authed, screen, activeProp, properties, user });
  }, [authed, screen, activeProp, properties, user]);

  const nav = (s, propId) => { setScreen(s); if (propId) setActiveProp(propId); document.querySelector('.pf-body')?.scrollTo(0, 0); };

  const addProperty = (prop) => {
    const id = 'p' + (Date.now() % 100000);
    const np = { id, thumb: PF_THUMBS[Math.floor(Math.random() * PF_THUMBS.length)], owned: { analisis: false, inscripcion: false, gestion: false }, docs: [], ...prop };
    setProperties(p => [...p, np]);
    return id;
  };
  const updateProperty = (id, patch) => setProperties(p => p.map(x => x.id === id ? { ...x, ...patch } : x));

  const reset = () => { localStorage.removeItem('yb_platform_v1'); setAuthed(false); setScreen('dashboard'); setProperties(seedProperties()); setUser(null); setActiveProp('p1'); };

  return { authed, setAuthed, screen, nav, activeProp, setActiveProp, properties, addProperty, updateProperty, user, setUser, checkout, setCheckout, reset };
}

Object.assign(window, { PF_SERVICES, PF_REQS, PF_THUMBS, useStore, seedProperties });
