"use client";
import {
  NewProjectInitialValue,
  NewProjectValidation,
} from "@/Data/Application/Project";
import { useAppDispatch, useAppSelector } from "@/Redux/Hooks";
import { setCreatedData } from "@/Redux/Reducers/ProjectSlice";
import { Formik, Form, Field, ErrorMessage } from "formik";
import { useRouter } from "next/navigation";
import { ProjectInitialValue } from "@/Types/ProjectType";
import {
  Button,
  Card,
  CardBody,
  Col,
  Container,
  FormGroup,
  Label,
  Row,
} from "reactstrap";
import Link from "next/link";
import { useState } from "react";
import Select from "react-select";
import dynamic from "next/dynamic";

const options = [
  { value: "hassan", label: "Hassan Azeem" },
  { value: "dawood", label: "Dawood Ayyub" },
  { value: "abdulah", label: "Abdullah Ajaib" },
];

const countryCurrencyOptions = [
  {
    country: "United Arab Emirates",
    label: "United Arab Emirates Dirham (AED)",
    symbol: "د.إ",
  },
  { country: "Afghanistan", label: "Afghan Afghani (؋)", symbol: "؋" },
  { country: "Albania", label: "Albanian Lek (ALL)", symbol: "Lek" },
  { country: "Armenia", label: "Armenian Dram (AMD)", symbol: "֏" },
  {
    country: "Netherlands Antilles",
    label: "Netherlands Antillean Guilder (ANG)",
    symbol: "ƒ",
  },
  { country: "Angola", label: "Angolan Kwanza (AOA)", symbol: "Kz" },
  { country: "Argentina", label: "Argentine Peso ($)", symbol: "$" },
  { country: "Australia", label: "Australian Dollar (A$)", symbol: "$" },
  { country: "Aruba", label: "Aruban Florin (AWG)", symbol: "ƒ" },
  { country: "Azerbaijan", label: "Azerbaijani Manat (₼)", symbol: "₼" },
  {
    country: "Bosnia and Herzegovina",
    label: "Bosnia and Herzegovina Convertible Mark (BAM)",
    symbol: "KM",
  },
  { country: "Barbados", label: "Barbadian Dollar (BBD)", symbol: "$" },
  { country: "Bangladesh", label: "Bangladeshi Taka (৳)", symbol: "৳" },
  { country: "Bulgaria", label: "Bulgarian Lev (BGN)", symbol: "лв" },
  { country: "Bahrain", label: "Bahraini Dinar (BHD)", symbol: "ب.د" },
  { country: "Burundi", label: "Burundian Franc (BIF)", symbol: "FBu" },
  { country: "Bermuda", label: "Bermudian Dollar (BMD)", symbol: "$" },
  { country: "Brunei", label: "Brunei Dollar (BND)", symbol: "$" },
  { country: "Bolivia", label: "Bolivian Boliviano (Bs)", symbol: "Bs." },
  { country: "Brazil", label: "Brazilian Real (R$)", symbol: "R$" },
  { country: "Bahamas", label: "Bahamian Dollar (BSD)", symbol: "$" },
  { country: "Bhutan", label: "Bhutanese Ngultrum (BTN)", symbol: "Nu." },
  { country: "Botswana", label: "Botswana Pula (BWP)", symbol: "P" },
  { country: "Belarus", label: "Belarusian Ruble (BYN)", symbol: "Br" },
  { country: "Belize", label: "Belize Dollar (BZD)", symbol: "BZ$" },
  { country: "Canada", label: "Canadian Dollar (C$)", symbol: "$" },
  { country: "Congo (Kinshasa)", label: "Congolese Franc (CDF)", symbol: "FC" },
  { country: "Switzerland", label: "Swiss Franc (CHF)", symbol: "CHF" },
  { country: "Chile", label: "Chilean Peso ($)", symbol: "$" },
  { country: "China", label: "Chinese Yuan (¥)", symbol: "¥" },
  { country: "Colombia", label: "Colombian Peso ($)", symbol: "$" },
  { country: "Costa Rica", label: "Costa Rican Colon (₡)", symbol: "₡" },
  { country: "Cuba", label: "Cuban Peso (CUP)", symbol: "₱" },
  { country: "Cape Verde", label: "Cape Verdean Escudo (CVE)", symbol: "$" },
  { country: "Czech Republic", label: "Czech Koruna (Kč)", symbol: "Kč" },
  { country: "Djibouti", label: "Djiboutian Franc (DJF)", symbol: "Fdj" },
  { country: "Denmark", label: "Danish Krone (kr)", symbol: "kr" },
  {
    country: "Dominican Republic",
    label: "Dominican Peso (RD$)",
    symbol: "RD$",
  },
  { country: "Algeria", label: "Algerian Dinar (DZD)", symbol: "د.ج" },
  { country: "Egypt", label: "Egyptian Pound (E£)", symbol: "£" },
  { country: "Eritrea", label: "Eritrean Nakfa (ERN)", symbol: "Nfk" },
  { country: "Ethiopia", label: "Ethiopian Birr (ETB)", symbol: "Br" },
  { country: "Eurozone", label: "Euro (€)", symbol: "€" },
  { country: "Fiji", label: "Fijian Dollar (FJD)", symbol: "FJ$" },
  {
    country: "Falkland Islands",
    label: "Falkland Islands Pound (£)",
    symbol: "£",
  },
  { country: "United Kingdom", label: "British Pound (£)", symbol: "£" },
  { country: "Georgia", label: "Georgian Lari (GEL)", symbol: "₾" },
  { country: "Guernsey", label: "Guernsey Pound (£)", symbol: "£" },
  { country: "Ghana", label: "Ghanaian Cedi (GH₵)", symbol: "GH₵" },
  { country: "Gibraltar", label: "Gibraltar Pound (£)", symbol: "£" },
  { country: "Gambia", label: "Gambian Dalasi (GMD)", symbol: "D" },
  { country: "Guinea", label: "Guinean Franc (GNF)", symbol: "FG" },
  { country: "Guatemala", label: "Guatemalan Quetzal (GTQ)", symbol: "Q" },
  { country: "Guyana", label: "Guyanese Dollar (GYD)", symbol: "$" },
  {
    country: "Hong Kong SAR China",
    label: "Hong Kong Dollar (HK$)",
    symbol: "HK$",
  },
  { country: "Honduras", label: "Honduran Lempira (HNL)", symbol: "L" },
  { country: "Croatia", label: "Croatian Kuna (kn)", symbol: "kn" },
  { country: "Haiti", label: "Haitian Gourde (HTG)", symbol: "G" },
  { country: "Hungary", label: "Hungarian Forint (Ft)", symbol: "Ft" },
  { country: "Indonesia", label: "Indonesian Rupiah (Rp)", symbol: "Rp" },
  { country: "Israel", label: "Israeli New Shekel (₪)", symbol: "₪" },
  { country: "Isle of Man", label: "Manx Pound (£)", symbol: "£" },
  { country: "India", label: "Indian Rupee (₹)", symbol: "₹" },
  { country: "Iraq", label: "Iraqi Dinar (IQD)", symbol: "ع.د" },
  { country: "Iran", label: "Iranian Rial (﷼)", symbol: "﷼" },
  { country: "Iceland", label: "Icelandic Krona (kr)", symbol: "kr" },
  { country: "Jersey", label: "Jersey Pound (£)", symbol: "£" },
  { country: "Jamaica", label: "Jamaican Dollar (J$)", symbol: "J$" },
  { country: "Jordan", label: "Jordanian Dinar (JOD)", symbol: "د.ا" },
  { country: "Japan", label: "Japanese Yen (¥)", symbol: "¥" },
  { country: "Kenya", label: "Kenyan Shilling (KSh)", symbol: "KSh" },
  { country: "Kyrgyzstan", label: "Kyrgyzstani Som (KGS)", symbol: "сом" },
  { country: "Cambodia", label: "Cambodian Riel (៛)", symbol: "៛" },
  { country: "Comoros", label: "Comorian Franc (KMF)", symbol: "CF" },
  { country: "North Korea", label: "North Korean Won (₩)", symbol: "₩" },
  { country: "South Korea", label: "South Korean Won (₩)", symbol: "₩" },
  { country: "Kuwait", label: "Kuwaiti Dinar (KWD)", symbol: "د.ك" },
  {
    country: "Cayman Islands",
    label: "Cayman Islands Dollar (KYD)",
    symbol: "$",
  },
  { country: "Kazakhstan", label: "Kazakhstani Tenge (KZT)", symbol: "₸" },
  { country: "Laos", label: "Laotian Kip (₭)", symbol: "₭" },
  { country: "Lebanon", label: "Lebanese Pound (LBP)", symbol: "ل.ل" },
  { country: "Sri Lanka", label: "Sri Lankan Rupee (Rs)", symbol: "₨" },
  { country: "Liberia", label: "Liberian Dollar (LRD)", symbol: "$" },
  { country: "Lesotho", label: "Lesotho Loti (LSL)", symbol: "L" },
  { country: "Libya", label: "Libyan Dinar (LYD)", symbol: "ل.د" },
  { country: "Morocco", label: "Moroccan Dirham (MAD)", symbol: "د.م." },
  { country: "Moldova", label: "Moldovan Leu (MDL)", symbol: "lei" },
  { country: "Madagascar", label: "Malagasy Ariary (MGA)", symbol: "Ar" },
  { country: "Macedonia", label: "Macedonian Denar (MKD)", symbol: "ден" },
  { country: "Myanmar (Burma)", label: "Myanmar Kyat (MMK)", symbol: "K" },
  { country: "Mongolia", label: "Mongolian Tugrik (₮)", symbol: "₮" },
  {
    country: "Macau SAR China",
    label: "Macanese Pataca (MOP)",
    symbol: "MOP$",
  },
  { country: "Mauritania", label: "Mauritanian Ouguiya (MRU)", symbol: "UM" },
  { country: "Mauritius", label: "Mauritian Rupee (₨)", symbol: "₨" },
  { country: "Maldives", label: "Maldivian Rufiyaa (MVR)", symbol: "Rf" },
  { country: "Malawi", label: "Malawian Kwacha (MWK)", symbol: "MK" },
  { country: "Mexico", label: "Mexican Peso ($)", symbol: "$" },
  { country: "Malaysia", label: "Malaysian Ringgit (RM)", symbol: "RM" },
  { country: "Mozambique", label: "Mozambican Metical (MZN)", symbol: "MT" },
  { country: "Namibia", label: "Namibian Dollar (N$", symbol: "N$" },
  { country: "Nigeria", label: "Nigerian Naira (₦)", symbol: "₦" },
  { country: "Nicaragua", label: "Nicaraguan Cordoba (C$)", symbol: "C$" },
  { country: "Norway", label: "Norwegian Krone (kr)", symbol: "kr" },
  { country: "Nepal", label: "Nepalese Rupee (रू)", symbol: "रू" },
  { country: "New Zealand", label: "New Zealand Dollar (NZ$)", symbol: "NZ$" },
  { country: "Oman", label: "Omani Rial (OMR)", symbol: "ر.ع." },
  { country: "Panama", label: "Panamanian Balboa (B/.)", symbol: "B/." },
  { country: "Peru", label: "Peruvian Nuevo Sol (S/.)", symbol: "S/." },
  {
    country: "Papua New Guinea",
    label: "Papua New Guinean Kina (PGK)",
    symbol: "K",
  },
  { country: "Philippines", label: "Philippine Peso (₱)", symbol: "₱" },
  { country: "Pakistan", label: "Pakistani Rupee (₨)", symbol: "₨" },
  { country: "Poland", label: "Polish Zloty (zł)", symbol: "zł" },
  { country: "Paraguay", label: "Paraguayan Guarani (₲)", symbol: "₲" },
  { country: "Qatar", label: "Qatari Riyal (QAR)", symbol: "ر.ق" },
  { country: "Romania", label: "Romanian Leu (lei)", symbol: "lei" },
  { country: "Serbia", label: "Serbian Dinar (RSD)", symbol: "din" },
  { country: "Russia", label: "Russian Ruble (₽)", symbol: "₽" },
  { country: "Rwanda", label: "Rwandan Franc (RWF)", symbol: "FRw" },
  { country: "Saudi Arabia", label: "Saudi Riyal (SAR)", symbol: "ر.س" },
  {
    country: "Solomon Islands",
    label: "Solomon Islands Dollar (SBD)",
    symbol: "SI$",
  },
  { country: "Seychelles", label: "Seychellois Rupee (₨)", symbol: "₨" },
  { country: "Sudan", label: "Sudanese Pound (SDG)", symbol: "SDG" },
  { country: "Sweden", label: "Swedish Krona (kr)", symbol: "kr" },
  { country: "Singapore", label: "Singapore Dollar (SGD)", symbol: "S$" },
  { country: "Saint Helena", label: "Saint Helena Pound (£)", symbol: "£" },
  { country: "Sierra Leone", label: "Sierra Leonean Leone (Le)", symbol: "Le" },
  { country: "Somalia", label: "Somali Shilling (SOS)", symbol: "S" },
  { country: "Suriname", label: "Surinamese Dollar (SRD)", symbol: "$" },
  {
    country: "South Sudan",
    label: "South Sudanese Pound (SSP)",
    symbol: "SSP",
  },
  {
    country: "São Tomé & Príncipe",
    label: "São Tomé & Príncipe Dobra (STN)",
    symbol: "Db",
  },
  { country: "Syria", label: "Syrian Pound (SYP)", symbol: "£S" },
  { country: "Swaziland", label: "Swazi Lilangeni (SZL)", symbol: "E" },
  { country: "Thailand", label: "Thai Baht (฿)", symbol: "฿" },
  { country: "Tajikistan", label: "Tajikistani Somoni (TJS)", symbol: "ЅМ" },
  { country: "Turkmenistan", label: "Turkmenistani Manat (TMT)", symbol: "T" },
  { country: "Tunisia", label: "Tunisian Dinar (TND)", symbol: "د.ت" },
  { country: "Tonga", label: "Tongan Pa'anga (TOP)", symbol: "T$" },
  { country: "Turkey", label: "Turkish Lira (₺)", symbol: "₺" },
  {
    country: "Trinidad & Tobago",
    label: "Trinidad & Tobago Dollar (TT$)",
    symbol: "TT$",
  },
  { country: "Taiwan", label: "Taiwan New Dollar (NT$)", symbol: "NT$" },
  { country: "Tanzania", label: "Tanzanian Shilling (TZS)", symbol: "TSh" },
  { country: "Ukraine", label: "Ukrainian Hryvnia (₴)", symbol: "₴" },
  { country: "Uganda", label: "Ugandan Shilling (UGX)", symbol: "USh" },
  { country: "United States", label: "US Dollar ($)", symbol: "$" },
  { country: "Uruguay", label: "Uruguayan Peso ($U)", symbol: "$U" },
  { country: "Uzbekistan", label: "Uzbekistani Som (UZS)", symbol: "soʻm" },
  {
    country: "Venezuela",
    label: "Venezuelan Bolivar (Bs.S.)",
    symbol: "Bs.S.",
  },
  { country: "Vietnam", label: "Vietnamese Dong (₫)", symbol: "₫" },
  { country: "Vanuatu", label: "Vanuatu Vatu (VUV)", symbol: "VT" },
  { country: "Samoa", label: "Samoan Tala (WST)", symbol: "WS$" },
  {
    country: "Central African Republic",
    label: "Central African CFA Franc (FCFA)",
    symbol: "FCFA",
  },
  {
    country: "East Caribbean",
    label: "East Caribbean Dollar (EC$)",
    symbol: "EC$",
  },
  {
    country: "West African",
    label: "West African CFA Franc (CFA)",
    symbol: "CFA",
  },
  {
    country: "CFA Franc BCEAO",
    label: "West African CFA Franc (CFA)",
    symbol: "CFA",
  },
  {
    country: "CFA Franc BEAC",
    label: "Central African CFA Franc (CFA)",
    symbol: "CFA",
  },
  { country: "Yemen", label: "Yemeni Rial (YER)", symbol: "﷼" },
  { country: "South Africa", label: "South African Rand (R)", symbol: "R" },
  { country: "Zambia", label: "Zambian Kwacha (ZMW)", symbol: "ZMW" },
  { country: "Zimbabwe", label: "Zimbabwean Dollar (ZWL)", symbol: "" },
];

const InvoicesUpdateForm = () => {
  const router = useRouter();
  const { createdFormData } = useAppSelector((state) => state.project);
  const { i18LangStatus } = useAppSelector((state) => state.langSlice);

  const dispatch = useAppDispatch();
  const randomValue = Math.floor(Math.random() * (100 - 10 + 1)) + 10;
  const [showDueDate, setShowDueDate] = useState(false);
  const handleCheckboxChange = () => {
    setShowDueDate(!showDueDate);
  };
  const projectSubmit = (values: ProjectInitialValue) => {
    const submittedData = {
      id: randomValue.toString(),
      title: values.title,
      badge: values.progress === 100 ? "Done" : "Doing",
      image: "3.jpg",
      sites: "Themeforest, australia",
      description:
        "Riho Admin is a full featured, multipurpose, premium bootstrap admin template.",
      issue: randomValue.toString(),
      resolved: randomValue.toString(),
      comment: randomValue.toString(),
      like: randomValue.toString(),
      customers_img1: "3.jpg",
      customers_img2: "5.jpg",
      customers_img3: "1.jpg",
      progress: values.progress,
      projectLevel: values.progress,
    };
    dispatch(setCreatedData([...createdFormData, submittedData]));
    router.back();
  };

  return (
    <Container fluid>
      <Row>
        <Col sm="12">
          <Card>
            <CardBody>
              <Formik
                initialValues={NewProjectInitialValue}
                validationSchema={NewProjectValidation}
                onSubmit={projectSubmit}
              >
                {() => (
                  <Form className="theme-form">
                    <Row>
                      <Col sm="4">
                        <FormGroup>
                          <Label check>
                            Client<span className="text-danger">*</span>
                          </Label>

                          <Select options={options} />
                        </FormGroup>
                      </Col>
                      <Col sm="4">
                        <FormGroup>
                          <Label check>
                            Invoice #<span className="text-danger">*</span>
                          </Label>

                          <Field
                            name="invoice"
                            className="form-control"
                            type="number"
                            placeholder=""
                          />
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                      </Col>
                      <Col sm="4">
                        <FormGroup>
                          <Label>
                            Reference<span className="text-danger">*</span>
                          </Label>

                          <Field
                            name="invoice"
                            className="form-control"
                            type="number"
                            placeholder=""
                          />
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                      </Col>
                    </Row>
                    <Row>
                      <Col sm="4">
                        <FormGroup>
                          <Label check>
                            Total<span className="text-danger">*</span>
                          </Label>

                          <Field
                            name="invoice"
                            className="form-control"
                            type="number"
                            placeholder=""
                          />
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                      </Col>
                      <Col sm="4">
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check>
                            Amount Open<span className="text-danger">*</span>
                          </Label>
                          <Field
                            name="invoice"
                            className="form-control"
                            type="number"
                            placeholder=""
                          />
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                      </Col>
                      <Col sm="4">
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check>
                            Currency<span className="text-danger">*</span>
                          </Label>
                          <Select options={countryCurrencyOptions} />
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                      </Col>
                    </Row>
                    <Row>
                      <Col sm="5">
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check>Invoice Date</Label>
                          <Field
                            name="startingDate"
                            className="form-control"
                            type="date"
                            placeholder=""
                          />
                        </FormGroup>
                      </Col>
                      <Col sm="2">
                        <FormGroup className="d-flex flex-column">
                          <Label check>Custom Date</Label>
                          <Field
                            type="checkbox"
                            className=" mt-2"
                            onChange={handleCheckboxChange}
                            checked={showDueDate}
                          />
                        </FormGroup>
                      </Col>
                      <Col sm="5" className={showDueDate ? "" : "d-none"}>
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check>Due Date</Label>
                          <Field
                            name="type"
                            as="select"
                            className="form-control form-select"
                          >
                            <option selected>Select Date</option>
                            <option value={"15"}>{"15"}</option>
                            <option value={"30"}>{"30"}</option>
                            <option value={"45"}>{"45"}</option>
                            <option value={"60"}>{"60"}</option>
                            <option value={"75"}>{"75"}</option>
                            <option value={"90"}>{"90"}</option>
                          </Field>
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check></Label>
                        </FormGroup>
                      </Col>
                      <Col sm="5" className={showDueDate ? "d-none" : ""}>
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check>Due Date</Label>
                          <Field
                            type="date"
                            name="date"
                            className="form-control"
                          ></Field>
                          <ErrorMessage
                            name="progress"
                            component="span"
                            className="text-danger"
                          />
                        </FormGroup>
                        <FormGroup className="d-flex flex-column align-items-stretch">
                          <Label check></Label>
                        </FormGroup>
                      </Col>
                    </Row>
                    <Row>
                      <Col>
                        <div className="text-end">
                          <Button
                            type="submit"
                            color="primary"
                            className="me-3"
                          >
                            Update
                          </Button>
                          <Link
                            className="btn btn-outline-primary"
                            href={`/${i18LangStatus}/invoices/open`}
                          >
                            Cancel
                          </Link>
                        </div>
                      </Col>
                    </Row>
                  </Form>
                )}
              </Formik>
            </CardBody>
          </Card>
        </Col>
      </Row>
    </Container>
  );
};

export default InvoicesUpdateForm;
