// portal/screens/cotizaciones.jsx — Módulo de Cotizaciones ALMACO / AMEC

(function () {
  const { useState, useEffect, useCallback } = React;

  function fmtD(d) { return d ? d.slice(0,10) : '—'; }
  function fmtP(v, dec=2) { return v != null ? '$' + Number(v).toLocaleString('es-SV',{minimumFractionDigits:dec,maximumFractionDigits:dec}) : '—'; }

  const ESTADO_COT = {
    espera_cliente: {label:'Espera cliente', color:'var(--orange)'},
    aceptada:       {label:'Aceptada',       color:'var(--green)'},
    rechazada:      {label:'Rechazada',      color:'var(--red)'},
  };

  function BadgeCot({estado}) {
    const s = ESTADO_COT[estado]||ESTADO_COT.espera_cliente;
    return <span style={{padding:'2px 8px',borderRadius:20,background:s.color+'20',color:s.color,fontSize:11,fontWeight:600}}>{s.label}</span>;
  }

  // ─── Modal: Vista / Impresión ─────────────────────────────────────────────
  const ModalVerCotizacion = ({cot, onClose}) => {
    const precioIva   = cot.precio_negociado ? Number(cot.precio_negociado) * 1.13 : 0;
    const precioFlete = cot.incluye_flete && cot.valor_flete ? Number(cot.valor_flete) : 0;
    const total       = precioIva + precioFlete;
    const esAlmaco    = cot.empresa === 'almaco';

    return (
      <Modal title={`Cotización ${cot.numero}`} onClose={onClose} width={660}>
        <div style={{marginBottom:12,textAlign:'right'}}>
          <button className="btn-secondary" style={{fontSize:12,padding:'6px 14px'}} onClick={()=>window.print()}>🖨 Imprimir</button>
        </div>

        {/* Encabezado empresa */}
        <div style={{textAlign:'center',paddingBottom:16,marginBottom:20,borderBottom:'1px solid var(--border)'}}>
          <div style={{fontSize:20,fontWeight:800,color:'var(--yellow)',letterSpacing:1}}>{esAlmaco?'ALMACO SA DE CV':'AMEC'}</div>
          <div style={{fontSize:12,color:'var(--text-3)',marginTop:4}}>{esAlmaco?'Alquileres de Maquinaria y Construcción':'Alquileres de Maquinaria y Equipo de Construcción'}</div>
        </div>

        {/* Número y fecha */}
        <div style={{display:'flex',justifyContent:'space-between',marginBottom:16}}>
          <div>
            <div style={{fontSize:11,color:'var(--text-3)',textTransform:'uppercase',letterSpacing:'.06em'}}>N° Cotización</div>
            <div style={{fontSize:18,fontWeight:700,color:'var(--text)',fontFamily:'var(--font-mono)'}}>{cot.numero}</div>
          </div>
          <div style={{textAlign:'right'}}>
            <div style={{fontSize:11,color:'var(--text-3)',textTransform:'uppercase',letterSpacing:'.06em'}}>Fecha</div>
            <div style={{fontSize:14,fontWeight:600}}>{fmtD(cot.created_at)}</div>
          </div>
        </div>

        {/* Cliente y máquina */}
        <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:12,background:'var(--bg-3)',border:'1px solid var(--border)',borderRadius:8,padding:14,marginBottom:16}}>
          <div>
            <div style={{fontSize:11,color:'var(--text-3)',textTransform:'uppercase',letterSpacing:'.06em',marginBottom:4}}>Cliente</div>
            <div style={{fontWeight:600}}>{cot.cliente_nombre||'—'}</div>
          </div>
          <div>
            <div style={{fontSize:11,color:'var(--text-3)',textTransform:'uppercase',letterSpacing:'.06em',marginBottom:4}}>Maquinaria</div>
            <div style={{fontWeight:600}}>{cot.maquina_codigo?`${cot.maquina_codigo} — ${cot.maquina_nombre||''}` : '—'}</div>
          </div>
        </div>

        {/* Condiciones */}
        <div style={{marginBottom:16}}>
          <div style={{fontSize:12,fontWeight:700,color:'var(--text-2)',textTransform:'uppercase',letterSpacing:'.06em',marginBottom:10}}>Condiciones del Alquiler</div>
          <div style={{border:'1px solid var(--border)',borderRadius:8,overflow:'hidden'}}>
            {[
              ['Tipo de contrato', cot.tipo_contrato==='hora'?'Por hora':'Por día', 'Período', cot.periodo_tipo==='indefinido'?'Indefinido':`${cot.periodo_cantidad} ${cot.periodo_tipo}`],
              ['Precio sin IVA', `${fmtP(cot.precio_negociado)} / ${cot.tipo_contrato==='hora'?'hr':'día'}`, 'IVA (13%)', fmtP(cot.precio_negociado?cot.precio_negociado*0.13:0)],
              ['Precio con IVA', fmtP(precioIva), 'Flete', cot.incluye_flete?fmtP(precioFlete):'No incluye'],
            ].map((row,i)=>(
              <div key={i} style={{display:'grid',gridTemplateColumns:'1fr 1fr 1fr 1fr',borderBottom:i<2?'1px solid var(--border)':'none'}}>
                <div style={{padding:'10px 12px',fontSize:12,color:'var(--text-3)'}}>{row[0]}</div>
                <div style={{padding:'10px 12px',fontSize:12,fontWeight:600}}>{row[1]}</div>
                <div style={{padding:'10px 12px',fontSize:12,color:'var(--text-3)'}}>{row[2]}</div>
                <div style={{padding:'10px 12px',fontSize:12,fontWeight:600}}>{row[3]}</div>
              </div>
            ))}
            {cot.incluye_flete && (
              <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',borderTop:'1px solid var(--border)',background:'var(--bg-3)'}}>
                <div style={{padding:'10px 12px',fontSize:13,fontWeight:700}}>TOTAL</div>
                <div style={{padding:'10px 12px',fontSize:16,fontWeight:700,color:'var(--green)'}}>{fmtP(total)}</div>
              </div>
            )}
          </div>
        </div>

        {cot.notas && (
          <div style={{padding:12,background:'var(--bg-3)',border:'1px solid var(--border)',borderRadius:8,marginBottom:16}}>
            <div style={{fontSize:11,color:'var(--text-3)',textTransform:'uppercase',letterSpacing:'.06em',marginBottom:4}}>Notas</div>
            <div style={{fontSize:13}}>{cot.notas}</div>
          </div>
        )}

        {/* Firma */}
        <div style={{textAlign:'center',paddingTop:24,marginTop:24,borderTop:'1px solid var(--border)'}}>
          <div style={{display:'inline-block',borderTop:'1px solid var(--text-2)',paddingTop:8,minWidth:200}}>
            <div style={{fontWeight:700}}>Ricardo Meléndez</div>
            <div style={{fontSize:12,color:'var(--text-3)'}}>Gerente de Operaciones / CEO</div>
            <div style={{fontSize:11,color:'var(--text-3)'}}>{esAlmaco?'ALMACO SA DE CV':'AMEC'}</div>
          </div>
        </div>
      </Modal>
    );
  };

  // ─── Modal: Nueva/Editar Cotización ───────────────────────────────────────
  const ModalFormCotizacion = ({item, clientes, maquinaria, onClose, onSaved}) => {
    const [form, setForm] = useState({
      empresa: item?.empresa||'almaco',
      cliente_id: item?.cliente_id||'',
      maquina_id: item?.maquina_id||'',
      tipo_contrato: item?.tipo_contrato||'hora',
      periodo_tipo: item?.periodo_tipo||'indefinido',
      periodo_cantidad: item?.periodo_cantidad||'',
      precio_negociado: item?.precio_negociado||'',
      incluye_flete: item?.incluye_flete||false,
      valor_flete: item?.valor_flete||'',
      notas: item?.notas||'',
      estado: item?.estado||'espera_cliente',
    });
    const [saving, setSaving] = useState(false);
    const [err, setErr] = useState('');
    const set = k => e => setForm(f=>({...f,[k]:e.target.value}));

    const precioIva = form.precio_negociado ? Number(form.precio_negociado)*1.13 : 0;

    const submit = async () => {
      if (!form.precio_negociado) { setErr('Precio requerido'); return; }
      setSaving(true); setErr('');
      try {
        const data = {...form, cliente_id:form.cliente_id||null, maquina_id:form.maquina_id||null, precio_negociado:Number(form.precio_negociado), valor_flete:Number(form.valor_flete||0), periodo_cantidad:form.periodo_tipo==='indefinido'?null:Number(form.periodo_cantidad)};
        item ? await window.API.cotizaciones.update(item.id, data) : await window.API.cotizaciones.create(data);
        onSaved();
      } catch(e) { setErr(e.message); } finally { setSaving(false); }
    };

    return (
      <Modal title={item?`Editar ${item.numero}`:'Nueva Cotización'} onClose={onClose} width={540}>
        {err && <ErrorBanner msg={err}/>}
        <div style={{display:'flex',flexDirection:'column',gap:10}}>
          <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:10}}>
            <div className="form-row">
              <label className="form-label">Empresa</label>
              <select className="form-input" value={form.empresa} onChange={set('empresa')}>
                <option value="almaco">ALMACO SA DE CV</option>
                <option value="amec">AMEC</option>
              </select>
            </div>
            <div className="form-row">
              <label className="form-label">Estado</label>
              <select className="form-input" value={form.estado} onChange={set('estado')}>
                <option value="espera_cliente">Espera Cliente</option>
                <option value="aceptada">Aceptada</option>
                <option value="rechazada">Rechazada</option>
              </select>
            </div>
          </div>
          <div className="form-row">
            <label className="form-label">Cliente</label>
            <select className="form-input" value={form.cliente_id} onChange={set('cliente_id')}>
              <option value="">— Sin especificar —</option>
              {clientes.map(c=><option key={c.id} value={c.id}>{c.nombre}</option>)}
            </select>
          </div>
          <div className="form-row">
            <label className="form-label">Maquinaria</label>
            <select className="form-input" value={form.maquina_id} onChange={set('maquina_id')}>
              <option value="">— Sin especificar —</option>
              {maquinaria.map(m=><option key={m.id} value={m.id}>{m.codigo} — {m.nombre}</option>)}
            </select>
          </div>
          <div style={{display:'grid',gridTemplateColumns:'1fr 1fr 1fr',gap:10}}>
            <div className="form-row">
              <label className="form-label">Contrato</label>
              <select className="form-input" value={form.tipo_contrato} onChange={set('tipo_contrato')}>
                <option value="hora">Por Hora</option>
                <option value="dia">Por Día</option>
              </select>
            </div>
            <div className="form-row">
              <label className="form-label">Período</label>
              <select className="form-input" value={form.periodo_tipo} onChange={set('periodo_tipo')}>
                <option value="indefinido">Indefinido</option>
                <option value="dias">Días</option>
                <option value="semanas">Semanas</option>
                <option value="meses">Meses</option>
              </select>
            </div>
            <div className="form-row">
              <label className="form-label">Cantidad</label>
              <input className="form-input" type="number" min="1" value={form.periodo_cantidad} onChange={set('periodo_cantidad')} disabled={form.periodo_tipo==='indefinido'} placeholder={form.periodo_tipo==='indefinido'?'—':''}/>
            </div>
          </div>
          <div className="form-row">
            <label className="form-label">Precio negociado (sin IVA) *</label>
            <input className="form-input" type="number" step="0.01" min="0" value={form.precio_negociado} onChange={set('precio_negociado')}/>
            {form.precio_negociado>0 && <div style={{fontSize:12,color:'var(--green)',marginTop:4}}>Con IVA 13%: <strong>{fmtP(precioIva)}</strong> / {form.tipo_contrato==='hora'?'hr':'día'}</div>}
          </div>
          <div style={{display:'grid',gridTemplateColumns:'auto 1fr',gap:12,alignItems:'center'}}>
            <label style={{display:'flex',alignItems:'center',gap:8,cursor:'pointer',fontSize:13,color:'var(--text-2)',whiteSpace:'nowrap'}}>
              <input type="checkbox" checked={form.incluye_flete} onChange={e=>setForm(f=>({...f,incluye_flete:e.target.checked}))}/> Incluye flete
            </label>
            {form.incluye_flete && <input className="form-input" type="number" step="0.01" min="0" placeholder="Valor flete" value={form.valor_flete} onChange={set('valor_flete')} style={{margin:0}}/>}
          </div>
          <div className="form-row">
            <label className="form-label">Notas</label>
            <textarea className="form-input" rows={3} value={form.notas} onChange={set('notas')} placeholder="Condiciones especiales…"/>
          </div>
          <div style={{display:'flex',justifyContent:'flex-end',gap:8,marginTop:4}}>
            <button className="btn-ghost" onClick={onClose}>Cancelar</button>
            <button className="btn-primary" style={{width:'auto',padding:'9px 20px'}} onClick={submit} disabled={saving}>{saving?'Guardando…':'Guardar'}</button>
          </div>
        </div>
      </Modal>
    );
  };

  // ─── Pantalla Principal ───────────────────────────────────────────────────
  const Cotizaciones = ({user}) => {
    const isAdmin = ['admin','gerencia'].includes(user?.rol);
    const [cotizaciones, setCotizaciones] = useState([]);
    const [clientes, setClientes]         = useState([]);
    const [maquinaria, setMaquinaria]     = useState([]);
    const [loading, setLoading]           = useState(true);
    const [error, setError]               = useState('');
    const [filtroEstado, setFiltroEstado]     = useState('');
    const [filtroEmpresa, setFiltroEmpresa]   = useState('');
    const [modalForm, setModalForm]           = useState(null);
    const [modalVer, setModalVer]             = useState(null);

    const load = useCallback(async () => {
      setLoading(true); setError('');
      try {
        const [c,cl,m] = await Promise.all([window.API.cotizaciones.list(),window.API.clientes_alquiler.list(),window.API.maquinaria.list()]);
        setCotizaciones(c); setClientes(cl); setMaquinaria(m);
      } catch(e) { setError(e.message); } finally { setLoading(false); }
    }, []);

    useEffect(()=>{ load(); },[load]);

    const filtradas = cotizaciones.filter(c=>
      (!filtroEstado  || c.estado  === filtroEstado) &&
      (!filtroEmpresa || c.empresa === filtroEmpresa)
    );

    const stats = {
      total:    cotizaciones.length,
      espera:   cotizaciones.filter(c=>c.estado==='espera_cliente').length,
      aceptadas: cotizaciones.filter(c=>c.estado==='aceptada').length,
      rechazadas:cotizaciones.filter(c=>c.estado==='rechazada').length,
    };

    return (
      <div className="content">
        <div className="page-title-row">
          <div>
            <div className="page-title">Cotizaciones</div>
            <div className="page-sub">Propuestas de alquiler · ALMACO SA DE CV / AMEC</div>
          </div>
          <div className="page-actions">
            <button className="btn-secondary" onClick={load}><Icon name="refresh" size={14}/></button>
            {isAdmin && <button className="btn-primary" style={{width:'auto',padding:'10px 14px'}} onClick={()=>setModalForm({})}><Icon name="plus" size={14}/> Nueva cotización</button>}
          </div>
        </div>

        <div className="kpi-grid" style={{gridTemplateColumns:'repeat(4,1fr)',marginBottom:20}}>
          <KpiCard label="Total"      value={stats.total}     icon="file"       meta="cotizaciones"/>
          <KpiCard label="En espera"  value={stats.espera}    icon="clock"      meta="aguardando respuesta"/>
          <KpiCard label="Aceptadas"  value={stats.aceptadas} icon="check"      meta="convertidas"/>
          <KpiCard label="Rechazadas" value={stats.rechazadas} icon="x"         meta="no aceptadas"/>
        </div>

        {error && <ErrorBanner msg={error} onRetry={load}/>}

        {/* Filtros */}
        <div className="filters" style={{marginBottom:14,flexWrap:'wrap',gap:8}}>
          <select className="filter-chip" value={filtroEstado} onChange={e=>setFiltroEstado(e.target.value)} style={{appearance:'none'}}>
            <option value="">Todos los estados</option>
            <option value="espera_cliente">Espera Cliente</option>
            <option value="aceptada">Aceptadas</option>
            <option value="rechazada">Rechazadas</option>
          </select>
          <select className="filter-chip" value={filtroEmpresa} onChange={e=>setFiltroEmpresa(e.target.value)} style={{appearance:'none'}}>
            <option value="">Todas las empresas</option>
            <option value="almaco">ALMACO</option>
            <option value="amec">AMEC</option>
          </select>
        </div>

        <div className="card" style={{padding:0}}>
          {loading
            ? <div style={{display:'flex',justifyContent:'center',padding:40}}><Spinner size={24}/></div>
            : filtradas.length===0
              ? <EmptyState icon="file" title="Sin cotizaciones" sub="Crea la primera propuesta de alquiler."/>
              : (
                <div style={{overflowX:'auto'}}>
                  <table className="table">
                    <thead>
                      <tr><th>Número</th><th>Empresa</th><th>Cliente</th><th>Máquina</th><th>Tipo</th><th style={{textAlign:'right'}}>Precio s/IVA</th><th style={{textAlign:'right'}}>Precio c/IVA</th><th>Estado</th><th>Fecha</th><th></th></tr>
                    </thead>
                    <tbody>
                      {filtradas.map(c=>(
                        <tr key={c.id}>
                          <td style={{fontFamily:'var(--font-mono)',fontWeight:700,fontSize:12}}>{c.numero}</td>
                          <td>
                            <span style={{fontSize:11,fontWeight:700,padding:'2px 6px',borderRadius:4,background:c.empresa==='almaco'?'var(--yellow)20':'var(--purple)20',color:c.empresa==='almaco'?'var(--yellow)':'var(--purple)'}}>
                              {c.empresa.toUpperCase()}
                            </span>
                          </td>
                          <td style={{fontSize:12}}>{c.cliente_nombre||'—'}</td>
                          <td style={{fontSize:12,fontFamily:'var(--font-mono)'}}>{c.maquina_codigo||'—'}</td>
                          <td style={{fontSize:12}}>{c.tipo_contrato==='hora'?'Hora':'Día'}</td>
                          <td className="num">{fmtP(c.precio_negociado)}</td>
                          <td className="num strong">{fmtP(c.precio_negociado?c.precio_negociado*1.13:0)}</td>
                          <td><BadgeCot estado={c.estado}/></td>
                          <td style={{fontSize:12,color:'var(--text-3)'}}>{fmtD(c.created_at)}</td>
                          <td>
                            <div style={{display:'flex',gap:6}}>
                              <button className="btn-ghost" style={{fontSize:11,padding:'3px 8px'}} onClick={()=>setModalVer(c)}><Icon name="eye" size={13}/> Ver</button>
                              {isAdmin && <button className="btn-ghost" style={{fontSize:11,padding:'3px 8px'}} onClick={()=>setModalForm(c)}><Icon name="pencil" size={13}/></button>}
                            </div>
                          </td>
                        </tr>
                      ))}
                    </tbody>
                  </table>
                </div>
              )
          }
        </div>

        {modalForm && <ModalFormCotizacion item={modalForm.id?modalForm:null} clientes={clientes} maquinaria={maquinaria} onClose={()=>setModalForm(null)} onSaved={()=>{setModalForm(null);load();}}/>}
        {modalVer  && <ModalVerCotizacion  cot={modalVer} onClose={()=>setModalVer(null)}/>}
      </div>
    );
  };

  window.Cotizaciones = Cotizaciones;
})();
