import { useState, useEffect } from "react";
import Offcanvas from "../../components/Offcanvas";
import { Formik, Form, Field, ErrorMessage } from "formik";
import * as Yup from "yup";
import Select from "react-select";
import Button from "../../components/Buttons";
import pendant from '../../assets/images/product/pendant.png';
import { productApi } from "../../api/productApi";
import { orderApi } from "../../api/orderApi";
import { customerApi } from "../../api/customerApi";
import Swal from 'sweetalert2';

const channels = [
  { key: "whatsapp", label: "WhatsApp", color: "emerald" },
  { key: "instagram", label: "Instagram", color: "pink" },
];

const inputCls =
  'w-full border border-[#ECE2D2] bg-[#FBF6ED] rounded-[10px] px-[14px] py-[10px] text-[14px] text-[#3B2F28] outline-none box-border focus:border-[#CF8F42] focus:ring-1 focus:ring-[#CF8F42] transition';

const selectStyles = {
  control: (base: any, state: any) => ({
    ...base,
    transition: "all 0.2s ease",
    backgroundColor: "#FBF6ED",
    borderColor: state.isFocused ? "#CF8F42" : "#ECE2D2",
    boxShadow: state.isFocused
      ? "0 0 0 3px rgba(207, 143, 66, 0.15)"
      : "none",
    borderRadius: "10px",
    padding: "2px 6px",
    minHeight: "42px",
    fontSize: "14px",
    color: "#3B2F28",
    "&:hover": {
      borderColor: "#CF8F42",
    },
  }),

  valueContainer: (base: any) => ({
    ...base,
    padding: "2px 6px",
  }),

  input: (base: any) => ({
    ...base,
    color: "#3B2F28",
  }),

  placeholder: (base: any) => ({
    ...base,
    color: "#9A8F86",
    fontSize: "14px",
  }),

  singleValue: (base: any) => ({
    ...base,
    color: "#3B2F28",
    fontSize: "14px",
  }),

  menu: (base: any) => ({
    ...base,
    borderRadius: "10px",
    overflow: "hidden",
    marginTop: 6,
    backgroundColor: "#ffffff",
    border: "1px solid #ECE2D2",
  }),

  option: (base: any, state: any) => ({
    ...base,
    fontSize: "14px",
    backgroundColor: state.isFocused
      ? "#FBF6ED"
      : state.isSelected
        ? "#F3E3C7"
        : "#fff",
    color: "#3B2F28",
    cursor: "pointer",
  }),

  dropdownIndicator: (base: any) => ({
    ...base,
    color: "#3B2F28",
    "&:hover": {
      color: "#CF8F42",
    },
  }),

  indicatorSeparator: () => ({
    display: "none",
  }),
};
const validationSchema = Yup.object({
  name: Yup.string().trim().required("Full name is required"),
  phone: Yup.string()
    .trim()
    .required("Phone Number 1 is required")
    .matches(/^[0-9+\s()-]{7,20}$/, "Invalid phone number"),
  phone2: Yup.string()
    .trim()
    .matches(/^[0-9+\s()-]{7,20}$/, "Invalid phone number")
    .nullable(),
  email: Yup.string().trim().email("Invalid email address").nullable(),
  address: Yup.string().trim().required("Address / Street details are required"),
  city: Yup.string().trim().nullable(),
  state: Yup.string().trim().nullable(),
  pincode: Yup.string().trim().required("Pincode is required"),
  channel: Yup.string().required(),
});

const INDIAN_STATES = [
  'Andhra Pradesh', 'Arunachal Pradesh', 'Assam', 'Bihar', 'Chhattisgarh',
  'Goa', 'Gujarat', 'Haryana', 'Himachal Pradesh', 'Jharkhand', 'Karnataka',
  'Kerala', 'Madhya Pradesh', 'Maharashtra', 'Manipur', 'Meghalaya', 'Mizoram',
  'Nagaland', 'Odisha', 'Punjab', 'Rajasthan', 'Sikkim', 'Tamil Nadu',
  'Telangana', 'Tripura', 'Uttar Pradesh', 'Uttarakhand', 'West Bengal',
  'Delhi', 'Jammu and Kashmir', 'Ladakh', 'Puducherry', 'Chandigarh'
];

const CITY_TO_STATE: Record<string, string> = {
  bangalore: 'Karnataka',
  bengaluru: 'Karnataka',
  mysore: 'Karnataka',
  mysuru: 'Karnataka',
  hubli: 'Karnataka',
  mangalore: 'Karnataka',
  chennai: 'Tamil Nadu',
  coimbatore: 'Tamil Nadu',
  madurai: 'Tamil Nadu',
  salem: 'Tamil Nadu',
  trichy: 'Tamil Nadu',
  tiruchirappalli: 'Tamil Nadu',
  tirunelveli: 'Tamil Nadu',
  erode: 'Tamil Nadu',
  vellore: 'Tamil Nadu',
  hyderabad: 'Telangana',
  secunderabad: 'Telangana',
  warangal: 'Telangana',
  visakhapatnam: 'Andhra Pradesh',
  vijayawada: 'Andhra Pradesh',
  guntur: 'Andhra Pradesh',
  mumbai: 'Maharashtra',
  pune: 'Maharashtra',
  nagpur: 'Maharashtra',
  thane: 'Maharashtra',
  nashik: 'Maharashtra',
  delhi: 'Delhi',
  'new delhi': 'Delhi',
  noida: 'Uttar Pradesh',
  gurgaon: 'Haryana',
  gurugram: 'Haryana',
  kolkata: 'West Bengal',
  ahmedabad: 'Gujarat',
  surat: 'Gujarat',
  vadodara: 'Gujarat',
  jaipur: 'Rajasthan',
  jodhpur: 'Rajasthan',
  udaipur: 'Rajasthan',
  lucknow: 'Uttar Pradesh',
  kanpur: 'Uttar Pradesh',
  agra: 'Uttar Pradesh',
  varanasi: 'Uttar Pradesh',
  kochi: 'Kerala',
  cochin: 'Kerala',
  thiruvananthapuram: 'Kerala',
  trivandrum: 'Kerala',
  kozhikode: 'Kerala',
  calicut: 'Kerala',
  bhopal: 'Madhya Pradesh',
  indore: 'Madhya Pradesh',
  patna: 'Bihar',
  chandigarh: 'Chandigarh',
  bhubaneswar: 'Odisha',
  guwahati: 'Assam',
};

function isState(str?: string | null): boolean {
  if (!str) return false;
  return INDIAN_STATES.some((s) => s.toLowerCase() === str.trim().toLowerCase());
}

export function parseCustomerAddress(rawAddress?: string | null): {
  address: string;
  city: string;
  state: string;
  pincode: string;
} {
  if (
    !rawAddress ||
    !rawAddress.trim() ||
    rawAddress.trim().toLowerCase() === 'india' ||
    rawAddress.trim().toLowerCase() === 'no address provided'
  ) {
    return { address: '', city: '', state: '', pincode: '' };
  }

  let text = rawAddress.trim();

  // 1. Extract 6-digit Pincode (e.g. 560001 or - 560001)
  let pincode = '';
  const pinMatch = text.match(/(?:^|[^0-9])([1-9][0-9]{5})(?:[^0-9]|$)/);
  if (pinMatch) {
    pincode = pinMatch[1];
    text = text.replace(new RegExp('[-–,]?\\s*' + pincode + '.*$', 'i'), '').trim();
  }

  // 2. Split remainder by commas
  const parts = text.split(',').map((p) => p.trim()).filter(Boolean);

  let city = '';
  let state = '';
  let address = '';

  if (parts.length >= 3) {
    const last = parts[parts.length - 1];
    const secondLast = parts[parts.length - 2];
    if (isState(last)) {
      state = last;
      city = secondLast;
      address = parts.slice(0, parts.length - 2).join(', ');
    } else {
      city = last;
      address = parts.slice(0, parts.length - 1).join(', ');
    }
  } else if (parts.length === 2) {
    const last = parts[1];
    if (isState(last)) {
      state = last;
      address = parts[0];
    } else {
      city = last;
      address = parts[0];
    }
  } else if (parts.length === 1) {
    address = parts[0];
  }

  // 3. Fallback state from city if not present
  if (!state && city) {
    const matchedState = CITY_TO_STATE[city.toLowerCase()];
    if (matchedState) {
      state = matchedState;
    }
  }

  return { address, city, state, pincode };
}

const initialValues = {
  name: "",
  phone: "",
  phone2: "",
  email: "",
  address: "",
  city: "",
  state: "",
  pincode: "",
  channel: "whatsapp",
};

export default function QuickOrderAdd({ open, setOpen, onSuccess, initialData }: any) {
  const [selectedChannel, setSelectedChannel] = useState("whatsapp");
  const [customersData, setCustomersData] = useState<any[]>([]);
  const [filteredPhoneCustomers, setFilteredPhoneCustomers] = useState<any[]>([]);
  const [showPhoneDropdown, setShowPhoneDropdown] = useState(false);
  const [filteredNameCustomers, setFilteredNameCustomers] = useState<any[]>([]);
  const [showNameDropdown, setShowNameDropdown] = useState(false);
  const [isSubmitting, setIsSubmitting] = useState(false);

  useEffect(() => {
    if (open) {
      if (initialData?.channel) {
        setSelectedChannel(initialData.channel);
      }
      customerApi.getAllCustomers().then((res) => {
        if (res.success) {
          setCustomersData(res.data);
        }
      });
    }
  }, [open, initialData]);

  const selectCustomer = (c: any, form: any) => {
    // 1. Full Name
    if (c.name && c.name !== 'Unknown') {
      form.setFieldValue("name", c.name);
    }

    // 2. Phone Number 1 & 2
    const rawPhone = (c.phone && c.phone !== 'N/A') ? c.phone : "";
    const phoneParts = rawPhone.split(/[,/|]/).map((p: string) => p.trim()).filter(Boolean);
    const phone1 = phoneParts[0] || (c.phone !== 'N/A' ? c.phone : "");
    const phone2 = phoneParts[1] || "";
    form.setFieldValue("phone", phone1);
    form.setFieldValue("phone2", phone2);

    // 3. Email (skip dummy generated emails if any)
    if (c.email && !c.email.endsWith('@example.com')) {
      form.setFieldValue("email", c.email);
    } else {
      form.setFieldValue("email", "");
    }

    // 4. Communication Channel
    if (c.channel && (c.channel === 'whatsapp' || c.channel === 'instagram')) {
      form.setFieldValue("channel", c.channel);
      setSelectedChannel(c.channel);
    }

    // 5. Address, City, State, Pincode
    const parsed = parseCustomerAddress(c.address);
    form.setFieldValue("address", parsed.address || (c.address && c.address !== 'India' ? c.address : ""));
    form.setFieldValue("city", parsed.city || "");
    form.setFieldValue("state", parsed.state || "");
    form.setFieldValue("pincode", parsed.pincode || "");

    // Close any open dropdowns
    setShowPhoneDropdown(false);
    setShowNameDropdown(false);
  };

  return (
    <Offcanvas
      isOpen={open}
      onClose={() => setOpen(false)}
      header={
        <div className="flex justify-between items-center">
          <h2 className="font-semibold text-lg text-[#7a2e1d]">
            Customer Registration Form
          </h2>
          <button onClick={() => setOpen(false)}>✕</button>
        </div>
      }
      footer={
        <div className="flex justify-end gap-3">
          <Button
            type="submit"
            form="quick-order-form"
            size="sm"
            disabled={isSubmitting}
            children={isSubmitting ? 'Registering...' : 'Add to Waiting List'}
            variant="primary"
            styleType="filled"
          />
        </div>}
    >
      <Formik
        initialValues={{ ...initialValues, ...initialData }}
        enableReinitialize
        validationSchema={validationSchema}
        onSubmit={async (values, { setSubmitting, resetForm }) => {
          setIsSubmitting(true);
          try {
            const addressTrimmed = (values.address || '').trim();
            const cityTrimmed = (values.city || '').trim();
            const stateTrimmed = (values.state || '').trim();
            const pincodeTrimmed = (values.pincode || '').trim();

            const parts: string[] = [addressTrimmed];
            if (cityTrimmed && !addressTrimmed.toLowerCase().includes(cityTrimmed.toLowerCase())) {
              parts.push(cityTrimmed);
            }
            if (stateTrimmed && !addressTrimmed.toLowerCase().includes(stateTrimmed.toLowerCase())) {
              parts.push(stateTrimmed);
            }
            let formattedAddress = parts.filter(Boolean).join(', ');
            if (pincodeTrimmed && !formattedAddress.includes(pincodeTrimmed)) {
              formattedAddress = formattedAddress ? `${formattedAddress} - ${pincodeTrimmed}` : pincodeTrimmed;
            }

            const phoneList = [values.phone?.trim(), values.phone2?.trim()].filter(Boolean);
            const formattedPhone = phoneList.join(', ');

            await orderApi.createOrder({
              channel: values.channel,
              customer_name: values.name.trim(),
              customer_phone: formattedPhone,
              customer_email: values.email?.trim() || null,
              shipping_address: formattedAddress,
              qty: 0,
              amount: 0,
            });

            Swal.fire({
              icon: 'success',
              title: 'Patron Added to Waiting List!',
              toast: true,
              position: 'top-end',
              showConfirmButton: false,
              timer: 3000
            });
            resetForm();
            setSelectedChannel("whatsapp");
            setOpen(false);
            if (onSuccess) onSuccess();
          } catch (e) {
            console.error(e);
            Swal.fire({
              icon: 'error',
              title: 'Failed to submit',
              text: 'Please try again.',
              toast: true,
              position: 'top-end',
              showConfirmButton: false,
              timer: 3000
            });
          }
          setIsSubmitting(false);
          setSubmitting(false);
        }}
      >
        {({ values, setFieldValue }) => (
          <Form id="quick-order-form" className="h-full flex flex-col dark:bg-slate-900 text-left">
            <div className="flex-1 overflow-y-auto px-2 space-y-4">
              <div>
                <label className="text-sm font-medium">
                  Select Communication Channel
                </label>

                <div className="grid grid-cols-2 gap-2.5 mt-2">
                  {channels.map((c) => {
                    const active = selectedChannel === c.key;

                    const styles = {
                      whatsapp: {
                        active: "bg-emerald-50 border-emerald-500 text-emerald-700 ring-2 ring-emerald-500/20",
                        inactive: "text-emerald-600 hover:border-emerald-400",
                      },
                      instagram: {
                        active: "bg-pink-50 border-pink-500 text-pink-700 ring-2 ring-pink-500/20",
                        inactive: "text-pink-600 hover:border-pink-400",
                      },
                    };

                    return (
                      <button
                        key={c.key}
                        type="button"
                        onClick={() => {
                          setSelectedChannel(c.key);
                          setFieldValue("channel", c.key);
                        }}
                        className={`
                          p-3 rounded-xl border flex flex-col items-center gap-1.5 transition
                          bg-white dark:bg-slate-800 cursor-pointer
                          ${active
                            ? styles[c.key as keyof typeof styles].active
                            : `border-slate-200 opacity-70 ${styles[c.key as keyof typeof styles].inactive}`
                          }
                        `}
                      >
                        <span className="text-xs font-bold">
                          {c.label}
                        </span>
                      </button>
                    );
                  })}
                </div>
              </div>

              {/* INPUTS */}
              <div className="space-y-3.5">
                <div className="relative">
                  <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                    Full Name *
                  </label>
                  <Field name="name">
                    {({ field, form }: any) => (
                      <>
                        <input
                          {...field}
                          type="text"
                          className={inputCls}
                          placeholder="Enter customer full name"
                          autoComplete="off"
                          onChange={(e) => {
                            field.onChange(e);
                            const val = e.target.value;
                            if (val.trim().length >= 2) {
                              const searchVal = val.toLowerCase().trim();
                              const searchDigits = val.replace(/\D/g, '');
                              const matches = customersData.filter((c: any) => {
                                const cName = (c.name || '').toLowerCase().trim();
                                const cPhone = (c.phone || '').trim();
                                const cPhoneDigits = cPhone.replace(/\D/g, '');
                                if (cName && cName !== 'unknown' && cName.includes(searchVal)) return true;
                                if (searchDigits.length >= 3 && cPhoneDigits.includes(searchDigits)) return true;
                                return false;
                              });
                              setFilteredNameCustomers(matches);
                              setShowNameDropdown(matches.length > 0);
                            } else {
                              setShowNameDropdown(false);
                            }
                          }}
                          onBlur={(e) => {
                            field.onBlur(e);
                            setTimeout(() => setShowNameDropdown(false), 250);
                          }}
                        />
                        {showNameDropdown && (
                          <div className="absolute top-full left-0 right-0 mt-1.5 bg-white border border-[#ECE2D2] rounded-xl shadow-2xl z-50 max-h-60 overflow-hidden flex flex-col">
                            <div className="px-3 py-1.5 bg-[#FAF6F0] border-b border-[#ECE2D2] text-[10px] font-bold text-[#8F5E24] uppercase tracking-wider flex items-center justify-between">
                              <span>Matching Patrons</span>
                              <span className="text-slate-400 font-normal">{filteredNameCustomers.length} found</span>
                            </div>
                            <div className="overflow-y-auto divide-y divide-[#ECE2D2]/60">
                              {filteredNameCustomers.map((c, i) => (
                                <div
                                  key={i}
                                  className="p-3 hover:bg-[#FBF6ED] cursor-pointer transition-colors group"
                                  onMouseDown={(e) => {
                                    e.preventDefault();
                                    selectCustomer(c, form);
                                  }}
                                >
                                  <div className="flex items-center justify-between gap-2">
                                    <div className="flex items-center gap-2.5 min-w-0">
                                      <div className="w-7 h-7 rounded-full bg-[#CF8F42]/15 text-[#8F5E24] font-bold text-xs flex items-center justify-center shrink-0">
                                        {(c.name && c.name !== 'Unknown' ? c.name[0] : 'C').toUpperCase()}
                                      </div>
                                      <div className="min-w-0">
                                        <div className="text-sm font-semibold text-[#3B2F28] group-hover:text-[#CF8F42] transition-colors truncate">
                                          {c.name && c.name !== 'Unknown' ? c.name : 'Unknown Patron'}
                                        </div>
                                      </div>
                                    </div>
                                    <span className="text-xs font-mono font-medium text-[#8F5E24] bg-[#CF8F42]/10 border border-[#CF8F42]/20 px-2 py-0.5 rounded-md shrink-0">
                                      {c.phone || 'No Phone'}
                                    </span>
                                  </div>
                                  {c.address && c.address !== 'India' && (
                                    <div className="text-xs text-slate-500 truncate mt-1 flex items-center gap-1 pl-9">
                                      <span className="text-slate-400 shrink-0">📍</span>
                                      <span className="truncate">{c.address}</span>
                                    </div>
                                  )}
                                </div>
                              ))}
                            </div>
                          </div>
                        )}
                      </>
                    )}
                  </Field>
                  <ErrorMessage name="name" component="p" className="text-red-500 text-[10px] mt-0.5" />
                </div>

                <div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
                  <div className="relative">
                    <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                      Phone Number 1 *
                    </label>
                    <Field name="phone">
                      {({ field, form }: any) => (
                        <>
                          <input
                            {...field}
                            type="text"
                            className={inputCls}
                            placeholder="+91 XXXXX XXXXX"
                            autoComplete="off"
                            onChange={(e) => {
                              field.onChange(e);
                              const val = e.target.value;
                              if (val.trim().length >= 3) {
                                const searchVal = val.toLowerCase().trim();
                                const searchDigits = val.replace(/\D/g, '');
                                const matches = customersData.filter((c: any) => {
                                  const cPhone = (c.phone || '').trim();
                                  const cName = (c.name || '').toLowerCase().trim();
                                  const cPhoneDigits = cPhone.replace(/\D/g, '');
                                  if (searchDigits.length >= 3 && cPhoneDigits.includes(searchDigits)) return true;
                                  if (cPhone.includes(searchVal)) return true;
                                  if (cName && cName !== 'unknown' && cName.includes(searchVal)) return true;
                                  return false;
                                });
                                setFilteredPhoneCustomers(matches);
                                setShowPhoneDropdown(matches.length > 0);
                              } else {
                                setShowPhoneDropdown(false);
                              }
                            }}
                            onBlur={(e) => {
                              field.onBlur(e);
                              setTimeout(() => setShowPhoneDropdown(false), 250);
                            }}
                          />
                          {showPhoneDropdown && (
                            <div className="absolute top-full left-0 w-full sm:w-[calc(200%+0.75rem)] mt-1.5 bg-white border border-[#ECE2D2] rounded-xl shadow-2xl z-50 max-h-60 overflow-hidden flex flex-col">
                              <div className="px-3 py-1.5 bg-[#FAF6F0] border-b border-[#ECE2D2] text-[10px] font-bold text-[#8F5E24] uppercase tracking-wider flex items-center justify-between">
                                <span>Matching Patrons</span>
                                <span className="text-slate-400 font-normal">{filteredPhoneCustomers.length} found</span>
                              </div>
                              <div className="overflow-y-auto divide-y divide-[#ECE2D2]/60">
                                {filteredPhoneCustomers.map((c, i) => (
                                  <div
                                    key={i}
                                    className="p-3 hover:bg-[#FBF6ED] cursor-pointer transition-colors group"
                                    onMouseDown={(e) => {
                                      e.preventDefault();
                                      selectCustomer(c, form);
                                    }}
                                  >
                                    <div className="flex items-center justify-between gap-2">
                                      <div className="flex items-center gap-2.5 min-w-0">
                                        <div className="w-7 h-7 rounded-full bg-[#CF8F42]/15 text-[#8F5E24] font-bold text-xs flex items-center justify-center shrink-0">
                                          {(c.name && c.name !== 'Unknown' ? c.name[0] : 'C').toUpperCase()}
                                        </div>
                                        <div className="min-w-0">
                                          <div className="text-sm font-semibold text-[#3B2F28] group-hover:text-[#CF8F42] transition-colors truncate">
                                            {c.name && c.name !== 'Unknown' ? c.name : 'Unknown Patron'}
                                          </div>
                                        </div>
                                      </div>
                                      <span className="text-xs font-mono font-medium text-[#8F5E24] bg-[#CF8F42]/10 border border-[#CF8F42]/20 px-2 py-0.5 rounded-md shrink-0">
                                        {c.phone || 'No Phone'}
                                      </span>
                                    </div>
                                    {c.address && c.address !== 'India' && (
                                      <div className="text-xs text-slate-500 truncate mt-1 flex items-center gap-1 pl-9">
                                        <span className="text-slate-400 shrink-0">📍</span>
                                        <span className="truncate">{c.address}</span>
                                      </div>
                                    )}
                                  </div>
                                ))}
                              </div>
                            </div>
                          )}
                        </>
                      )}
                    </Field>
                    <ErrorMessage name="phone" component="p" className="text-red-500 text-[10px] mt-0.5" />
                  </div>

                  <div>
                    <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                      Phone Number 2 <span className="text-slate-400 font-normal lowercase">(optional)</span>
                    </label>
                    <Field
                      name="phone2"
                      className={inputCls}
                      placeholder="+91 XXXXX XXXXX"
                    />
                    <ErrorMessage name="phone2" component="p" className="text-red-500 text-[10px] mt-0.5" />
                  </div>
                </div>

                <div>
                  <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                    Email Address <span className="text-slate-400 font-normal lowercase">(optional)</span>
                  </label>
                  <Field
                    name="email"
                    className={inputCls}
                    placeholder="customer@example.com"
                  />
                  <ErrorMessage name="email" component="p" className="text-red-500 text-[10px] mt-0.5" />
                </div>

                <div>
                  <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                    Address / Building / Street *
                  </label>
                  <Field
                    as="textarea"
                    name="address"
                    rows={2}
                    className={inputCls}
                    placeholder="Flat / Door No, Apartment / Building Name, Street / Road"
                  />
                  <ErrorMessage name="address" component="p" className="text-red-500 text-[10px] mt-0.5" />
                </div>

                <div className="grid grid-cols-1 sm:grid-cols-3 gap-3">
                  <div>
                    <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                      City
                    </label>
                    <Field
                      name="city"
                      className={inputCls}
                      placeholder="e.g. Bangalore"
                    />
                    <ErrorMessage name="city" component="p" className="text-red-500 text-[10px] mt-0.5" />
                  </div>

                  <div>
                    <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                      State
                    </label>
                    <Field
                      name="state"
                      className={inputCls}
                      placeholder="e.g. Karnataka"
                    />
                    <ErrorMessage name="state" component="p" className="text-red-500 text-[10px] mt-0.5" />
                  </div>

                  <div>
                    <label className="text-xs font-bold text-[#461901] block mb-1 uppercase tracking-wider">
                      PINCODE *
                    </label>
                    <Field
                      name="pincode"
                      className={inputCls}
                      placeholder="e.g. 560001"
                    />
                    <ErrorMessage name="pincode" component="p" className="text-red-500 text-[10px] mt-0.5" />
                  </div>
                </div>
              </div>
            </div>
          </Form>
        )}
      </Formik>
    </Offcanvas>
  );
}