import { FixedDepositFormField } from "@/components/validation/FormFields";
import CurrencySelect from "@/fields/Currency";
import DepositAmountInput from "@/fields/DepositAmount";
import TimePeriodInput from "@/fields/TimePeriodDuration";
import PlacementDatePicker from "@/fields/PlacementDate";
import BankAdviceRefNoInput from "@/fields/BankAdviceNo";
import InterestRateInput from "@/fields/IntrestPerAnum";
import BankSelect from "@/fields/Bank";
import MaturityDatePicker from "@/fields/MaturityDate";
import CommissionInput from "@/fields/Comission";       // Transaction Costs → commission
import PremiumPaidInput from "@/fields/PremiumPaid";     // Premium           → b_1
import FederalTurnoverTaxInput from "@/fields/FederalTurnOver"; // Tax        → b_2
import RemarksInput from "@/fields/Remarks";
import PurposeInput from "@/fields/Purpose";
 
interface FixedDepositFormFieldsProps {
  formData: {
    p_currency:        { label: string; value: string } | null;
    bank:              { label: string; value: string } | null;
    durationUnit:      { label: string; value: string } | null;
    bankadviserefno:   string;
    placementdate:     string;
    pricepersecurity:  string;  // b_1 (Premium)
    timeperiod:        string;  // duration
    effectivedate:     string;  // m_date
    amount:            string;  // price / principal
    commission:        string;  // commission (Transaction Costs)
    chargesandfees:    string;  // b_1 (Premium)
    federalturnovertax:string;  // b_2 (Tax)
    intrestperanum:    string;  // i_rate
    description:       string;  // purpose
    remarks:           string;

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

}
 
export const FixedDepositFormFields = ({
  formData,
  errors,
  clearError,
  handleFieldBlur,
  validateField,
  updateFormData,
  formatDateToString,
  setShowBankModal,
  isSale,
}: FixedDepositFormFieldsProps) => {
  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<FixedDepositFormField>
        amount={formData.amount}
        setamount={(amount) => updateFormData({ amount })}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
        isDisabled={isSale}

      />
 
      {/* Time Period + Duration Unit → duration + duration_other */}
      <TimePeriodInput<FixedDepositFormField>
        timeperiod={formData.timeperiod}
        settimeperiod={(period) => updateFormData({ timeperiod: period })}
        durationUnit={formData.durationUnit}
        setDurationUnit={(unit) => updateFormData({ durationUnit: unit })}
        clearError={clearError}
        errors={errors}
        handleFieldBlur={handleFieldBlur}
        validateField={validateField}
        isDisabled={isSale}
      />
 
      {/* Placement Date → t_date */}
      <PlacementDatePicker<FixedDepositFormField>
        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<FixedDepositFormField>
        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}

      />
 
      {/* Maturity Date → m_date */}
      <MaturityDatePicker
        maturitydate={formData.effectivedate}
        setmaturitydate={(date) => updateFormData({ effectivedate: date })}
        formatDateToString={formatDateToString}
      />
 
      {/* Transaction Costs → commission */}
      <CommissionInput
        commission={formData.commission}
        setcommission={(commission) => updateFormData({ commission })}
        // clearError={clearError}
        // errors={errors}
        // handleFieldBlur={handleFieldBlur}
        // validateField={validateField}
      />
 
      {/* Premium → b_1 (chargesandfees) */}
      <PremiumPaidInput<FixedDepositFormField>
        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>
  );
};