/** خلاصه مبالغ سبد / تسویه حساب */
import { faNumber, formatToman } from "@/lib/format";
import type { CartPricing } from "@/server/services/cart";

export function CartSummary({ pricing, showShipping = false, shippingSelected = true }: { pricing: CartPricing; showShipping?: boolean; shippingSelected?: boolean }) {
  const rows: [string, string][] = [
    [`جمع کالاها (${faNumber(pricing.lines.reduce((s, l) => s + l.availableQty, 0))})`, formatToman(pricing.subtotal)],
    ...(pricing.discount ? [["تخفیف", `− ${formatToman(pricing.discount)}`] as [string, string]] : []),
    ...(showShipping ? [["هزینه ارسال", !shippingSelected ? "انتخاب نشده" : pricing.shippingCost === 0 ? "رایگان" : formatToman(pricing.shippingCost)] as [string, string]] : []),
  ];
  return (
    <dl className="space-y-3 text-sm">
      {rows.map(([k, v]) => (
        <div key={k} className="flex justify-between">
          <dt className="text-muted">{k}</dt>
          <dd>{v}</dd>
        </div>
      ))}
      <div className="flex justify-between border-t border-line pt-3 text-base font-bold">
        <dt>{showShipping ? "مبلغ قابل پرداخت" : "جمع سبد"}</dt>
        <dd>{formatToman(showShipping ? pricing.total : pricing.subtotal - pricing.discount)}</dd>
      </div>
    </dl>
  );
}

/** نوار پیشرفت تا ارسال رایگان */
export function FreeShippingProgress({ pricing }: { pricing: CartPricing }) {
  const pct = Math.min(100, ((pricing.freeShippingThreshold - pricing.remainingForFreeShipping) / pricing.freeShippingThreshold) * 100);
  return (
    <div className="rounded-2xl bg-mist p-4 text-xs">
      <p>
        {pricing.remainingForFreeShipping > 0 ? (
          <>
            <b>{formatToman(pricing.remainingForFreeShipping)}</b> دیگر تا ارسال رایگان
          </>
        ) : (
          <b>ارسال این سفارش رایگان است</b>
        )}
      </p>
      <div className="mt-2 h-1 overflow-hidden rounded-full bg-fog">
        <div className="h-full rounded-full bg-ink transition-all" style={{ width: `${pct}%` }} />
      </div>
    </div>
  );
}
