import { CallDepositFormField } from "@/components/validation/FormFields";
import CurrencySelect from "@/fields/Currency";
import DepositAmountInput from "@/fields/DepositAmount";
import PlacementDatePicker from "@/fields/PlacementDate";
import BankAdviceRefNoInput from "@/fields/BankAdviceNo";
import InterestRateInput from "@/fields/IntrestPerAnum";
import BankSelect from "@/fields/Bank";
import TransactionCostsInput from "@/fields/TransactionCost";
import PremiumPaidInput from "@/fields/PremiumPaid";
import FederalTurnoverTaxInput from "@/fields/FederalTurnOver";
import RemarksInput from "@/fields/Remarks";
import PurposeInput from "@/fields/Purpose";
import CommissionInput from "@/fields/Comission"; // add this field if it doesn't exist yet


interface CallDepositFormFieldsProps {
  formData: {
    p_currency: { label: string; value: string } | null;
    bank: { label: string; value: string } | null;
    intrestperanum: string;
    bankadviserefno: string;
    placementdate: string;
    pricepersecurity: string;
    effectivedate: string;
    amount: string;
    commission: string;
    chargesandfees: string;
    federalturnovertax: string;
    description: string;
    remarks: string;

  };
  errors: Record<string, string>;
  clearError: (field: string) => void;
  handleFieldBlur: (
    field: CallDepositFormField,
    validator: (field: CallDepositFormField) => string | undefined
  ) => void;
  validateField: (field: CallDepositFormField) => string | undefined;
  updateFormData: (updates: any) => void;
  formatDateToString: (date: Date) => string;
  setShowBankModal: (show: boolean) => void;
  isSale?: boolean;   

}

export const CallDepositFormFields = ({
  formData,
  errors,
  clearError,
  handleFieldBlur,
  validateField,
  updateFormData,
  formatDateToString,
  setShowBankModal,
  isSale
}: CallDepositFormFieldsProps) => {
  return (
    <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">

      {/* Currency → p_currency */}
      <CurrencySelect
        p_currency={formData.p_currency}
        setp_currency={(currency) => updateFormData({ p_currency: currency })}
        isDisabled={isSale}

      />

      {/* Deposit Amount → price (and amount for display) */}
      <DepositAmountInput<CallDepositFormField>
        amount={formData.amount}
        setamount={(amount) => updateFormData({ amount })}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
      />

      {/* Placement Date → t_date */}
      <PlacementDatePicker<CallDepositFormField>
        placementdate={formData.placementdate}
        setplacementdate={(date) => updateFormData({ placementdate: date })}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
        formatDateToString={formatDateToString}
      />

      {/* Bank Advice Ref No → r_no */}
      <BankAdviceRefNoInput
        bankadviserefno={formData.bankadviserefno}
        setbankadviserefno={(ref) => updateFormData({ bankadviserefno: ref })}
      />

      {/* Interest Rate per Annum (%) → i_rate */}
      <InterestRateInput<CallDepositFormField>
        intrestperanum={formData.intrestperanum}
        setintrestperanum={(rate) => updateFormData({ intrestperanum: rate })}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
        isDisabled={isSale}

      />

      {/* Bank → bank_id */}
      <BankSelect
        bank={formData.bank}
        setbank={(bank) => updateFormData({ bank })}
        setShowBankModal={setShowBankModal}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
        isDisabled={isSale}
      />

      {/* Transaction Costs → commission */}
      <CommissionInput
        commission={formData.commission}
        setcommission={(commission) => updateFormData({ commission })}
        // clearError={clearError}
        // errors={errors}
        // handleFieldBlur={handleFieldBlur}
        // validateField={validateField}
      />

      {/* Premium → b_1 */}
      <PremiumPaidInput<CallDepositFormField>
        premiumpaid={formData.chargesandfees}
        setpremiumpaid={(premium) => updateFormData({ chargesandfees: premium })}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
        fieldName="premium"
      />

      {/* Tax → b_2 */}
      <FederalTurnoverTaxInput
        federalturnovertax={formData.federalturnovertax}
        setfederalturnovertax={(tax) => updateFormData({ federalturnovertax: tax })}
      />

      {/* Remarks / Comments → remarks */}
      <RemarksInput
        remarks={formData.remarks}
        setRemarks={(remarks) => updateFormData({ remarks })}
      />

      {/* Purpose → purpose */}
      <PurposeInput
        description={formData.description}
        setDescription={(description) => updateFormData({ description })}
      />

    </div>
  );
};