// A server-confirmed correction of a duplicate ledger entry. Never a payment.
function DuplicatePayrollCostForm({ duplicateId, onClose }) {
  const s = useHydor(), push = useToast(), pay = usePayrollServer();
  const t = window.__t || ((x) => x), policy = window.HydorPayrollCorrection;
  const [retainedId, setRetainedId] = React.useState("");
  const [reason, setReason] = React.useState("");
  const [confirmed, setConfirmed] = React.useState(false);
  const duplicate = s.costs.find(c => c.id === duplicateId);
  const options = policy ? s.costs.filter(c => policy.inspect(s, duplicateId, c.id).ok) : [];
  const ev = policy && policy.inspect(s, duplicateId, retainedId);
  const key = "duplicate-cost:" + duplicateId, busy = !!pay.pending[key];
  const me = Hydor.currentUser(), authorised = me && ["owner", "cofounder"].includes(me.role);
  const submit = async () => {
    if (!authorised || busy || !ev || !ev.ok || !confirmed || reason.trim().length < 10) return;
    const res = await pay.run(key, () => Hydor.buildPayrollOp("correctDuplicatePayrollCost",
      { duplicateCostId: duplicateId, retainedCostId: retainedId, reason, confirmSinglePayment: confirmed }));
    if (res.ok) { push(t("Duplicate corrected and confirmed by the server. No payment was made.")); onClose(); }
  };
  const describe = c => c ? c.id + " · " + c.item + " · " + Hydor.fmtDate(c.date) + " · " + Hydor.fmtMoney(c.amount) + " JOD" : "";
  return <Modal title={t("Correct duplicate salary cost")} onClose={() => { if (!busy) onClose(); }}
    foot={<><Btn onClick={onClose} disabled={busy}>{t("Cancel")}</Btn><Btn variant="primary" data-testid="confirm-cost-correction"
      disabled={!authorised || !pay.serverOwned || busy || !ev || !ev.ok || !confirmed || reason.trim().length < 10}
      onClick={submit}>{t(busy ? "Waiting for server confirmation…" : "Confirm book correction")}</Btn></>}>
    <p>{t("This corrects a duplicate record, not a second real payment. Original records and the employee payslip stay unchanged.")}</p>
    <p><strong>{t("Duplicate cost to offset")}</strong><br />{describe(duplicate)}</p>
    <label>{t("Original paid cost to keep")}<select className="sel" style={{ width: "100%" }} data-testid="retained-cost" value={retainedId} disabled={busy}
      onChange={e => { setRetainedId(e.target.value); setConfirmed(false); }}>
      <option value="">{t("Select the original cost")}</option>{options.map(c => <option key={c.id} value={c.id}>{describe(c)}</option>)}
    </select></label>
    {!options.length && <p role="alert">{t("No matching uncorrected paid cost is available. Nothing can be changed here.")}</p>}
    {ev && ev.ok && <div className="hx-panel" style={{ padding: 14, marginTop: 12 }} data-testid="cost-correction-effect">
      <div>{t("Selected pair total before correction")}: {Hydor.fmtMoney(ev.amount * 2)} JOD</div>
      <div>{t("Duplicate amount offset")}: −{Hydor.fmtMoney(ev.amount)} JOD</div>
      <strong>{t("Selected pair net after correction")}: {Hydor.fmtMoney(ev.amount)} JOD</strong>
      <p>{t("Recorded expenses decrease and expected cash increases by the offset amount. No cash transfer, debt or salary deduction is created.")}</p>
    </div>}
    <label>{t("Correction reason")}<textarea className="inp" rows={3} maxLength={2000} data-testid="cost-correction-reason" value={reason} disabled={busy}
      onChange={e => setReason(e.target.value)} style={{ width: "100%" }} /></label>
    <label style={{ display: "flex", gap: 8, marginTop: 12 }}><input type="checkbox" data-testid="single-payment-confirmation" checked={confirmed} disabled={busy}
      onChange={e => setConfirmed(e.target.checked)} />{t("I confirm that only one payment was actually made and the selected second cost is a duplicate entry.")}</label>
    {!pay.serverOwned && <p role="alert">{t("A secure online connection is required for a salary cost correction.")}</p>}
    {pay.errors[key] && <p role="alert" style={{ color: "var(--neg)" }}>{pay.errors[key]}</p>}
  </Modal>;
}
function PayrollCostCorrectionDetails({ cost, onClose }) {
  const t = window.__t || ((x) => x), e = cost.payrollCorrection;
  return <Modal title={t("Correction details")} onClose={onClose} foot={<Btn onClick={onClose}>{t("Close")}</Btn>}>
    <p>{cost.item}</p>
    <p>{t("Duplicate cost to offset")}: {e.duplicateCostId}</p>
    <p>{t("Original paid cost to keep")}: {e.retainedCostId}</p>
    <p>{t("Duplicate amount offset")}: −{Hydor.fmtMoney(e.originalAmount)} JOD</p>
    <p>{t("Recorded on")}: {e.recordedAt} · {e.byName || e.by}</p>
    <p>{t("Corrects payroll month")}: {e.payrollYm}</p>
    <p>{t("Correction reason")}: {e.reason}</p>
    <p>{t("Original records retained for audit. This correction is not an employee payment or refund.")}</p>
  </Modal>;
}
Object.assign(window, { DuplicatePayrollCostForm, PayrollCostCorrectionDetails });
