/* === Máximo · Yate — tareas, lista de compras, reservaciones, menús === */

const YATE_RESERVATIONS_INIT = [
  {
    id: "r1",
    actividad: "Inshore Fishing",
    fecha: "2026-05-30",
    cliente: "Familia Patterson",
    pax: 4,
    departurePoint: "Marina Punta Mita — Muelle Norte",
    pickupTime: "06:30",
    tripHours: 5,
    pago: "100",
    notas: "Iniciar antes de 12pm. Lucas alérgico a mariscos — usar menú alternativo.",
  },
  {
    id: "r2",
    actividad: "Offshore Fishing",
    fecha: "2026-06-04",
    cliente: "Sr. y Sra. Ramírez",
    pax: 2,
    departurePoint: "Marina Punta Mita — Muelle Sur",
    pickupTime: "05:30",
    tripHours: 8,
    pago: "50",
    notas: "Sin picante. Target: yellowfin tuna.",
  },
];

const YATE_MENUS = [
  {
    id: "inshore-am",
    name: "Inshore Fishing — antes de 12:00 PM",
    icon: "Sun",
    items: [
      "Fresh fruit, fresh orange juice, natural yoghurt, and granola",
      "Coffee",
      "Coca cola: regular and diet",
      "Bottles of water",
      "Gatorades",
      "All premium grade Rods / Reels and Top of the line fishing tackle",
      "Live Bait & Fish Cleaning",
      "Target Species: dorado, pargo, sierra, bonita",
    ],
  },
  {
    id: "inshore-pm",
    name: "Inshore Fishing — después de 12:00 PM",
    icon: "Clock",
    items: [
      "Shrimp flautas",
      "Beef Skewers",
      "Cheese quesadillas",
      "Guacamole and pico de gallo",
      "Sauces and corn chips",
      "Coca cola: regular and diet",
      "Bottles of water",
      "Gatorades",
      "All premium grade Rods / Reels and Top of the line fishing tackle",
      "Live Bait & Fish Cleaning",
      "Target Species: dorado, pargo, sierra, bonita",
    ],
  },
  {
    id: "offshore",
    name: "Offshore Fishing",
    icon: "Anchor",
    items: [
      "Fresh fruit, fresh orange juice, natural yoghurt, and granola",
      "Shrimp Flautas",
      "Beef Skewers",
      "Cheese quesadillas",
      "Guacamole and pico de gallo",
      "Sauces and corn chips",
      "Coca cola: regular and diet",
      "Bottles of water",
      "Gatorades",
      "Coffee",
      "All premium grade Rods / Reels and Top of the line fishing tackle",
      "Live Bait & Fish Cleaning",
      "Target Species: Yellowfin tuna, blue marlin, black marlin, sailfish, dorado, pargo & misc.",
    ],
  },
];

const YateView = ({ tasks, onSelect, selectedId, onToggle, canEditFn, role, user, compras, setCompras, onCreate }) => {
  // Hide "Tareas" tab for cocina users (Rodrigo, Cesar) who use Máximo only for
  // reservations / menus / shopping. Valentín (mantenimiento) keeps full task access.
  const yateIsPrimary = user.area === "yate";
  const showTareas = role === "admin" || role === "gerente" || yateIsPrimary || user.area === "mant";
  const [tab, setTab] = React.useState(showTareas ? "tareas" : "reservaciones");
  const [reservaciones, setReservaciones] = React.useState(YATE_RESERVATIONS_INIT);
  const [editingRes, setEditingRes] = React.useState(null);
  const [menuOpen, setMenuOpen] = React.useState(null);

  const yTasks = tasks.filter(t => t.area === "yate");
  const yList = compras.yate || [];

  const canEditList = role === "admin" || role === "gerente" || (role === "jefe" && user.area === "yate");
  const canEditRes = canEditList;

  const upsertRes = (r) => {
    setReservaciones(rs => {
      const exists = rs.some(x => x.id === r.id);
      return exists ? rs.map(x => x.id === r.id ? r : x) : [{ ...r, id: r.id || "r-" + Date.now() }, ...rs];
    });
    setEditingRes(null);
  };
  const removeRes = (id) => {
    if (window.confirm("¿Eliminar esta reservación?")) {
      setReservaciones(rs => rs.filter(r => r.id !== id));
    }
  };
  const editingResObj = editingRes === "new" ? null : editingRes ? reservaciones.find(r => r.id === editingRes) : null;

  // Próxima reservación (fecha futura más cercana)
  const upcoming = [...reservaciones]
    .filter(r => r.fecha >= TODAY_ISO)
    .sort((a, b) => a.fecha.localeCompare(b.fecha))[0];

  return (
    <div style={{ display: "flex", flexDirection: "column", gap: 18 }}>
      <div className="cdc-grid-cards" style={{ gridTemplateColumns: "repeat(4, 1fr)" }}>
        <div className="cdc-kpi">
          <div className="cdc-kpi__label">Tareas activas</div>
          <div className="cdc-kpi__value">{yTasks.filter(t => t.status !== "terminada").length}</div>
          <div className="cdc-kpi__sub">{yTasks.filter(t => t.priority === "alta").length} de alta prioridad</div>
        </div>
        <div className="cdc-kpi">
          <div className="cdc-kpi__label">Compras pendientes</div>
          <div className="cdc-kpi__value" style={{ color: yList.filter(i => i.status === "pendiente").length ? "var(--cdc-overdue)" : "var(--cdc-ink)" }}>
            {yList.filter(i => i.status === "pendiente").length}
          </div>
          <div className="cdc-kpi__sub">{yList.filter(i => i.status === "entregado").length} comprados</div>
        </div>
        <div className="cdc-kpi">
          <div className="cdc-kpi__label">Próxima reservación</div>
          <div className="cdc-kpi__value" style={{ fontSize: 19, lineHeight: 1.2 }}>
            {upcoming ? `${fmtShortDate(upcoming.fecha)} · ${upcoming.pickupTime}` : "—"}
          </div>
          <div className="cdc-kpi__sub">{upcoming ? `${upcoming.actividad} · ${upcoming.pax} pax` : "Sin viajes programados"}</div>
        </div>
        <div className="cdc-kpi">
          <div className="cdc-kpi__label">Estado del yate</div>
          <div className="cdc-kpi__value" style={{ fontSize: 19, lineHeight: 1.2, color: "var(--cdc-done)" }}>Operativo</div>
          <div className="cdc-kpi__sub">Último servicio: 12 may</div>
        </div>
      </div>

      <div className="cdc-tabs" style={{ background: "var(--cdc-panel)", borderRadius: "14px 14px 0 0", border: "1px solid var(--cdc-border)", borderBottom: 0, paddingLeft: 18 }}>
        {[
          ...(showTareas ? [["tareas", "Tareas"]] : []),
          ["reservaciones", `Reservaciones (${reservaciones.length})`],
          ["menus",         "Menús de viaje"],
          ["compras",       "Lista de compras"],
        ].map(([id, label]) => (
          <button key={id} className="cdc-tab" aria-selected={tab === id} onClick={() => setTab(id)}>{label}</button>
        ))}
      </div>

      {tab === "tareas" && showTareas && (
        <div className="cdc-card" style={{ borderTopLeftRadius: 0, borderTopRightRadius: 0, marginTop: -18 }}>
          <div className="cdc-card__head">
            <div style={{ display: "flex", alignItems: "center", gap: 10 }}>
              <I.Anchor size={20} />
              <div className="cdc-card__title">Tareas — Máximo</div>
              <span style={{ fontSize: 12, color: "var(--cdc-ink-3)" }}>{yTasks.length}</span>
            </div>
            {canEditList && (
              <button className="cdc-btn cdc-btn--coral" onClick={() => onCreate && onCreate("yate")}>
                <I.Plus size={14} /> Nueva tarea
              </button>
            )}
          </div>
          {yTasks.length === 0 ? (
            <div className="cdc-empty">
              <I.Anchor size={42} />
              <div className="cdc-empty__title">Sin tareas a bordo</div>
            </div>
          ) : (
            <TaskTable tasks={yTasks} onSelect={onSelect} selectedId={selectedId} onToggle={onToggle} canEditFn={canEditFn} />
          )}
        </div>
      )}

      {tab === "reservaciones" && (
        <div className="cdc-card" style={{ borderTopLeftRadius: 0, borderTopRightRadius: 0, marginTop: -18 }}>
          <div className="cdc-card__head">
            <div style={{ display: "flex", alignItems: "center", gap: 10 }}>
              <I.Calendar size={18} style={{ color: "var(--cdc-ink-3)" }} />
              <div className="cdc-card__title">Reservaciones</div>
              <span style={{ fontSize: 12, color: "var(--cdc-ink-3)" }}>{reservaciones.length}</span>
            </div>
            {canEditRes && (
              <button className="cdc-btn cdc-btn--coral" onClick={() => setEditingRes("new")}>
                <I.Plus size={14} /> Nueva reservación
              </button>
            )}
          </div>
          {reservaciones.length === 0 ? (
            <div className="cdc-empty">
              <I.Calendar size={42} />
              <div className="cdc-empty__title">Sin reservaciones</div>
              {canEditRes && (
                <button className="cdc-btn cdc-btn--coral" onClick={() => setEditingRes("new")}>
                  <I.Plus size={14} /> Crear primera reservación
                </button>
              )}
            </div>
          ) : (
            <div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(360px, 1fr))", gap: 14, padding: 18 }}>
              {[...reservaciones].sort((a, b) => a.fecha.localeCompare(b.fecha)).map(r => (
                <ReservacionCard key={r.id} res={r} canEdit={canEditRes} onEdit={() => setEditingRes(r.id)} onRemove={() => removeRes(r.id)} />
              ))}
            </div>
          )}
        </div>
      )}

      {tab === "menus" && (
        <div className="cdc-card" style={{ borderTopLeftRadius: 0, borderTopRightRadius: 0, marginTop: -18 }}>
          <div className="cdc-card__head">
            <div style={{ display: "flex", alignItems: "center", gap: 10 }}>
              <I.Chef size={18} style={{ color: "var(--cdc-ink-3)" }} />
              <div className="cdc-card__title">Menús de viaje</div>
              <span style={{ fontSize: 12, color: "var(--cdc-ink-3)" }}>{YATE_MENUS.length} opciones</span>
            </div>
          </div>
          <div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(320px, 1fr))", gap: 14, padding: 18 }}>
            {YATE_MENUS.map(m => {
              const IconCmp = I[m.icon] || I.Chef;
              return (
                <button
                  key={m.id}
                  onClick={() => setMenuOpen(m.id)}
                  style={{
                    background: "white", border: "1px solid var(--cdc-border)", borderRadius: 12,
                    padding: 16, textAlign: "left", display: "flex", flexDirection: "column", gap: 8,
                    cursor: "pointer",
                  }}
                >
                  <span style={{ display: "inline-flex", alignItems: "center", justifyContent: "center", width: 36, height: 36, borderRadius: 10, background: "var(--cdc-coral-soft)", color: "var(--cdc-coral-deep)" }}>
                    <IconCmp size={18} />
                  </span>
                  <div style={{ fontFamily: "var(--cdc-display)", fontSize: 17, fontWeight: 600, lineHeight: 1.25 }}>{m.name}</div>
                  <div style={{ fontSize: 12, color: "var(--cdc-ink-3)" }}>{m.items.length} ítems · click para ver detalle</div>
                </button>
              );
            })}
          </div>
        </div>
      )}

      {tab === "compras" && (
        <div className="cdc-card" style={{ borderTopLeftRadius: 0, borderTopRightRadius: 0, marginTop: -18 }}>
          <ShoppingListPanel
            items={yList}
            onUpdate={(newList) => setCompras({ ...compras, yate: newList })}
            listLabel="Yate Máximo"
            listId="yate"
            user={user}
            role={role}
            canEdit={canEditList}
          />
        </div>
      )}

      {editingRes && (
        <ReservacionDrawer
          res={editingResObj}
          onClose={() => setEditingRes(null)}
          onSave={upsertRes}
        />
      )}

      {menuOpen && (
        <MenuDetailDialog
          menu={YATE_MENUS.find(m => m.id === menuOpen)}
          onClose={() => setMenuOpen(null)}
        />
      )}
    </div>
  );
};

const ReservacionCard = ({ res, canEdit, onEdit, onRemove }) => {
  const isPast = res.fecha < TODAY_ISO;
  return (
    <div style={{
      background: "white", border: "1px solid var(--cdc-border)", borderRadius: 12,
      padding: 14, display: "flex", flexDirection: "column", gap: 8,
      opacity: isPast ? 0.65 : 1,
    }}>
      <div style={{ display: "flex", justifyContent: "space-between", gap: 8, alignItems: "flex-start" }}>
        <div style={{ minWidth: 0, flex: 1 }}>
          <div style={{ fontFamily: "var(--cdc-display)", fontSize: 18, fontWeight: 600 }}>{res.actividad}</div>
          <div style={{ fontSize: 12.5, color: "var(--cdc-ink-3)", display: "inline-flex", alignItems: "center", gap: 6, marginTop: 4 }}>
            <I.Calendar size={12} /> {fmtShortDate(res.fecha)}
            <span style={{ color: "var(--cdc-ink-4)" }}>·</span>
            <I.Clock size={12} /> {res.pickupTime}
            <span style={{ color: "var(--cdc-ink-4)" }}>·</span>
            <I.Users2 size={12} /> {res.pax} pax
          </div>
        </div>
        <div style={{ display: "flex", gap: 4, alignItems: "flex-start" }}>
          <span className="cdc-badge" style={{
            background: res.pago === "100" ? "var(--cdc-done-bg)" : "var(--cdc-pending-bg)",
            color: res.pago === "100" ? "var(--cdc-done)" : "var(--cdc-pending)",
          }}>
            {res.pago === "100" ? "Pagado 100%" : "Anticipo 50%"}
          </span>
          {canEdit && (
            <div style={{ display: "flex", gap: 2 }}>
              <button className="cdc-iconbtn" onClick={onEdit} title="Editar"><I.Edit size={13} /></button>
              <button className="cdc-iconbtn" onClick={onRemove} title="Eliminar"><I.Trash size={13} /></button>
            </div>
          )}
        </div>
      </div>
      <div style={{ display: "grid", gridTemplateColumns: "auto 1fr", gap: "4px 12px", fontSize: 12.5 }}>
        <span style={{ color: "var(--cdc-ink-3)" }}>Cliente</span>
        <span style={{ color: "var(--cdc-ink-2)", fontWeight: 600 }}>{res.cliente || "—"}</span>
        <span style={{ color: "var(--cdc-ink-3)" }}>Departure</span>
        <span style={{ color: "var(--cdc-ink-2)" }}>{res.departurePoint || "—"}</span>
        <span style={{ color: "var(--cdc-ink-3)" }}>Pick-up</span>
        <span style={{ color: "var(--cdc-ink-2)" }}>{res.pickupTime}</span>
        <span style={{ color: "var(--cdc-ink-3)" }}>Duración</span>
        <span style={{ color: "var(--cdc-ink-2)" }}>{res.tripHours} {res.tripHours === 1 ? "hora" : "horas"}</span>
      </div>
      {res.notas && (
        <div style={{ fontSize: 12, color: "var(--cdc-ink-3)", borderTop: "1px dashed var(--cdc-border-soft)", paddingTop: 8, lineHeight: 1.45 }}>{res.notas}</div>
      )}
    </div>
  );
};

const ReservacionDrawer = ({ res, onClose, onSave }) => {
  const [f, setF] = React.useState(res || {
    actividad: "Inshore Fishing", fecha: TODAY_ISO, cliente: "", pax: 2,
    departurePoint: "Marina Punta Mita", pickupTime: "07:00", tripHours: 5,
    pago: "50", notas: "",
  });
  const u = (k, v) => setF(x => ({ ...x, [k]: v }));
  return (
    <div className="cdc-overlay" onClick={onClose}>
      <div className="cdc-drawer" onClick={(e) => e.stopPropagation()}>
        <div className="cdc-drawer__head">
          <div className="cdc-drawer__title">{res ? "Editar reservación" : "Nueva reservación"}</div>
          <button className="cdc-iconbtn" onClick={onClose}><I.X size={18} /></button>
        </div>
        <div className="cdc-drawer__body">
          <div className="cdc-field">
            <label>Actividad</label>
            <select className="cdc-select" value={f.actividad} onChange={(e) => u("actividad", e.target.value)}>
              <option>Inshore Fishing</option>
              <option>Offshore Fishing</option>
              <option>Tour de Islas Marietas</option>
              <option>Snorkel & Beach</option>
              <option>Whale Watching</option>
              <option>Cena a bordo</option>
              <option>Sunset cruise</option>
              <option>Otro</option>
            </select>
          </div>
          <div className="cdc-row-2">
            <div className="cdc-field">
              <label>Fecha</label>
              <input type="date" className="cdc-input" value={f.fecha} onChange={(e) => u("fecha", e.target.value)} />
            </div>
            <div className="cdc-field">
              <label>Pick-up time</label>
              <input type="time" className="cdc-input" value={f.pickupTime} onChange={(e) => u("pickupTime", e.target.value)} />
            </div>
          </div>
          <div className="cdc-field">
            <label>Cliente</label>
            <input className="cdc-input" value={f.cliente} onChange={(e) => u("cliente", e.target.value)} placeholder="Familia Patterson, Sr. Ramírez…" />
          </div>
          <div className="cdc-row-2">
            <div className="cdc-field">
              <label>Núm. de pax</label>
              <input type="number" min="1" className="cdc-input" value={f.pax} onChange={(e) => u("pax", parseInt(e.target.value, 10) || 1)} />
            </div>
            <div className="cdc-field">
              <label>Trip hours</label>
              <input type="number" min="1" step="0.5" className="cdc-input" value={f.tripHours} onChange={(e) => u("tripHours", parseFloat(e.target.value) || 1)} />
            </div>
          </div>
          <div className="cdc-field">
            <label>Departure point</label>
            <input className="cdc-input" value={f.departurePoint} onChange={(e) => u("departurePoint", e.target.value)} placeholder="Marina Punta Mita — Muelle Norte" />
          </div>
          <div className="cdc-field">
            <label>Estado de pago</label>
            <div style={{ display: "flex", gap: 6 }}>
              <button type="button" className="cdc-chip" aria-pressed={f.pago === "50"} onClick={() => u("pago", "50")}>
                Anticipo 50%
              </button>
              <button type="button" className="cdc-chip" aria-pressed={f.pago === "100"} onClick={() => u("pago", "100")}>
                Pagado 100%
              </button>
            </div>
          </div>
          <div className="cdc-field">
            <label>Notas</label>
            <textarea className="cdc-textarea" value={f.notas} onChange={(e) => u("notas", e.target.value)} placeholder="Restricciones, alergias, especies objetivo, observaciones…" />
          </div>
        </div>
        <div className="cdc-panel__actions" style={{ position: "static", borderTop: "1px solid var(--cdc-border-soft)" }}>
          <button className="cdc-btn" onClick={onClose}>Cancelar</button>
          <button className="cdc-btn cdc-btn--primary" disabled={!f.cliente.trim()} onClick={() => onSave({ ...f, cliente: f.cliente.trim() })}>
            <I.Check size={14} /> {res ? "Guardar cambios" : "Crear reservación"}
          </button>
        </div>
      </div>
    </div>
  );
};

const MenuDetailDialog = ({ menu, onClose }) => {
  if (!menu) return null;
  const IconCmp = I[menu.icon] || I.Chef;
  return (
    <div className="cdc-overlay" onClick={onClose} style={{ alignItems: "center", justifyContent: "center" }}>
      <div onClick={(e) => e.stopPropagation()} style={{
        background: "white", borderRadius: 14, width: 520, maxWidth: "92vw", maxHeight: "85vh",
        boxShadow: "var(--cdc-shadow-lg)", overflow: "hidden", display: "flex", flexDirection: "column",
      }}>
        <div style={{ padding: "16px 22px", borderBottom: "1px solid var(--cdc-border-soft)", display: "flex", alignItems: "center", gap: 12 }}>
          <span style={{ display: "inline-flex", alignItems: "center", justifyContent: "center", width: 40, height: 40, borderRadius: 10, background: "var(--cdc-coral-soft)", color: "var(--cdc-coral-deep)" }}>
            <IconCmp size={20} />
          </span>
          <div style={{ flex: 1 }}>
            <div className="cdc-drawer__title">{menu.name}</div>
            <div style={{ fontSize: 12.5, color: "var(--cdc-ink-3)" }}>{menu.items.length} ítems incluidos</div>
          </div>
          <button className="cdc-iconbtn" onClick={onClose}><I.X size={18} /></button>
        </div>
        <div style={{ padding: "14px 22px", overflowY: "auto" }}>
          <ul style={{ listStyle: "none", padding: 0, margin: 0, display: "flex", flexDirection: "column", gap: 4 }}>
            {menu.items.map((item, i) => (
              <li key={i} style={{ display: "flex", gap: 8, padding: "8px 0", borderTop: i === 0 ? "none" : "1px solid var(--cdc-border-soft)", fontSize: 13.5, color: "var(--cdc-ink-2)", lineHeight: 1.4 }}>
                <span style={{ color: "var(--cdc-coral-deep)", flexShrink: 0 }}>•</span>
                <span>{item}</span>
              </li>
            ))}
          </ul>
        </div>
      </div>
    </div>
  );
};

Object.assign(window, { YateView, YATE_MENUS });
