import type { SellerWizardValues } from "./seller.schema";
import type { SavedDocuments } from "./page";

type SellerType = {
  id: number;
  name: string;
};

function ReviewBlock({ title, rows }: { title: string; rows: Array<{ label: string; value?: string | null }> }) {
  const formatValue = (value: unknown) => {
    if (value === null || value === undefined) return "-";
    if (typeof value === "string") return value.trim() || "-";
    return String(value);
  };

  return (
    <div className="rounded-xl border border-gray-200 bg-white p-4 shadow-sm">
      <h4 className="mb-3 text-sm font-semibold text-gray-900">{title}</h4>
      <div className="grid grid-cols-1 gap-3 md:grid-cols-2">
        {rows.map((row) => (
          <div key={row.label}>
            <p className="text-xs font-medium text-gray-500">{row.label}</p>
            <p className="mt-1 text-sm text-gray-900">{formatValue(row.value)}</p>
          </div>
        ))}
      </div>
    </div>
  );
}

export default function StepReview({
  values,
  sellerTypes,
  savedDocuments = {},
}: {
  values: SellerWizardValues;
  sellerTypes: SellerType[];
  /** Documents already stored against the request; the form fields only hold
   *  files picked in this session, so they read empty after a step is saved. */
  savedDocuments?: SavedDocuments;
}) {
  const docName = (value: unknown, savedUrl?: string) => {
    if (value instanceof File) return value.name;
    if (savedUrl) return "Uploaded";
    return "Not uploaded";
  };

  const businessTypeName =
    sellerTypes.find((type) => String(type.id) === values.seller_type)?.name || values.seller_type;

  return (
    <div className="space-y-4">
      <ReviewBlock
        title="Business Information"
        rows={[
          { label: "Business Name", value: values.company_name },
          { label: "GST", value: values.gst_number },
          { label: "PAN", value: values.pan_number },
          { label: "Business Type", value: businessTypeName },
          { label: "Constitution Type", value: values.constitution_type },
          { label: "Years in Business", value: values.years_in_business },
          { label: "Address", value: values.company_address },
          { label: "City", value: values.city },
          { label: "State", value: values.state },
          { label: "Country", value: values.country },
          { label: "Pincode", value: values.pincode },
        ]}
      />

      <ReviewBlock
        title="Contact Person"
        rows={[
          { label: "Contact Person", value: values.contact_person },
          { label: "Designation", value: values.designation },
          { label: "Mobile", value: values.mobile },
          { label: "Alternate Mobile", value: values.alternate_mobile },
          { label: "Email", value: values.email },
        ]}
      />

      <ReviewBlock
        title="Business Documents"
        rows={[
          {
            label: "GST Certificate",
            value: docName(values.gst_certificate, savedDocuments.gst_certificate),
          },
          { label: "PAN", value: docName(values.pan_document, savedDocuments.pan_document) },
          {
            label: "Registration Certificate",
            value: docName(values.registration_certificate, savedDocuments.registration_certificate),
          },
          { label: "Address Proof", value: docName(values.address_proof, savedDocuments.address_proof) },
          {
            label: "Cancelled Cheque",
            value: docName(values.cancelled_cheque, savedDocuments.cancelled_cheque),
          },
          {
            label: "Other Documents",
            value: docName(values.other_documents, savedDocuments.other_documents),
          },
        ]}
      />

      <ReviewBlock
        title="Bank Details"
        rows={[
          { label: "Account Name", value: values.account_holder_name },
          { label: "Bank Name", value: values.bank_name },
          { label: "Account Number", value: values.account_number },
          { label: "IFSC", value: values.ifsc_code },
          { label: "Account Type", value: values.account_type },
          { label: "Branch", value: values.branch },
        ]}
      />

      <ReviewBlock
        title="Store & Products"
        rows={[
          { label: "Category", value: values.category },
          { label: "Products", value: values.products },
          { label: "Turnover", value: values.turnover },
          { label: "Upload Option", value: values.product_upload_mode },
          ...(values.product_upload_mode === "bulk"
            ? [
                {
                  label: "Product Sheet",
                  value: docName(values.product_sheet, savedDocuments.product_sheet),
                },
              ]
            : []),
        ]}
      />
    </div>
  );
}
