"use client";
import React, { ChangeEvent, useEffect, useRef, useState } from "react";
import { useForm, Controller } from "react-hook-form";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Label } from "@/components/ui/label";
import { Card } from "@/components/ui/card";
import { zodResolver } from "@hookform/resolvers/zod";
import * as z from "zod";
import Swal from "sweetalert2";
import withReactContent from "sweetalert2-react-content";
import { useParams, useRouter } from "next/navigation";
import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select";
import { Checkbox } from "@/components/ui/checkbox";
import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
import JoditEditor from "jodit-react";
import { register } from "module";
import { Switch } from "@/components/ui/switch";
import Cookies from "js-cookie";
import { createTask } from "@/config/api";
import {
  createMedia,
  getTagsBySubCategoryId,
  listEnableCategory,
} from "@/service/content/content";
import { detailMedia } from "@/service/curated-content/curated-content";
import { Badge } from "@/components/ui/badge";
import { MailIcon } from "lucide-react";

const imageSchema = z.object({
  title: z.string().min(1, { message: "Judul diperlukan" }),
  description: z
    .string()
    .min(2, { message: "Narasi Penugasan harus lebih dari 2 karakter." }),
  creatorName: z.string().min(1, { message: "Creator diperlukan" }),
  // tags: z.string().min(1, { message: "Judul diperlukan" }),
});

type Category = {
  id: string;
  name: string;
};

type Detail = {
  id: string;
  title: string;
  description: string;
  slug: string;
  categoryId: {
    id: number;
    name: string;
  };
  creatorName: string;
  categoryName: string;
  thumbnailLink: string;
  tags: string;
};

export default function FormImageUpdate() {
  const MySwal = withReactContent(Swal);
  const router = useRouter();

  const { id } = useParams() as { id: string };
  console.log(id);
  const editor = useRef(null);
  type ImageSchema = z.infer<typeof imageSchema>;

  const [selectedFiles, setSelectedFiles] = useState<File[]>([]);
  const taskId = Cookies.get("taskId");
  const scheduleId = Cookies.get("scheduleId");
  const scheduleType = Cookies.get("scheduleType");

  const [categories, setCategories] = useState<Category[]>([]);
  const [selectedCategory, setSelectedCategory] = useState<any>();
  const [tags, setTags] = useState<any[]>([]);
  const [detail, setDetail] = useState<Detail>();
  const [refresh, setRefresh] = useState(false);
  const [selectedPublishers, setSelectedPublishers] = useState<number[]>([]);

  const [selectedTarget, setSelectedTarget] = useState("");
  const [unitSelection, setUnitSelection] = useState({
    allUnit: false,
    mabes: false,
    polda: false,
    polres: false,
  });

  let fileTypeId = "1";

  const {
    control,
    handleSubmit,
    setValue,
    formState: { errors },
  } = useForm<ImageSchema>({
    resolver: zodResolver(imageSchema),
  });

  // const handleKeyDown = (e: any) => {
  //   const newTag = e.target.value.trim(); // Ambil nilai input
  //   if (e.key === "Enter" && newTag) {
  //     e.preventDefault(); // Hentikan submit form
  //     if (!tags.includes(newTag)) {
  //       setTags((prevTags) => [...prevTags, newTag]); // Tambah tag baru
  //       setValue("tags", ""); // Kosongkan input
  //     }
  //   }
  // };

  const handleRemoveTag = (index: any) => {
    setTags((prevTags) => prevTags.filter((_, i) => i !== index));
  };

  const handleImageChange = (event: ChangeEvent<HTMLInputElement>) => {
    if (event.target.files) {
      const files = Array.from(event.target.files);
      setSelectedFiles((prevImages: any) => [...prevImages, ...files]);
      console.log("DATAFILE::", selectedFiles);
    }
  };

  const handleRemoveImage = (index: number) => {
    setSelectedFiles((prevImages) => prevImages.filter((_, i) => i !== index));
  };

  const handleCheckboxChange = (id: number) => {
    setSelectedPublishers((prev) =>
      prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]
    );
  };

  useEffect(() => {
    async function initState() {
      getCategories();
    }

    initState();
  }, []);

  const getCategories = async () => {
    try {
      const category = await listEnableCategory(fileTypeId);
      const resCategory: Category[] = category.data.data.content;

      setCategories(resCategory);
      console.log("data category", resCategory);

      if (scheduleId && scheduleType === "3") {
        const findCategory = resCategory.find((o) =>
          o.name.toLowerCase().includes("pers rilis")
        );

        if (findCategory) {
          // setValue("categoryId", findCategory.id);
          setSelectedCategory(findCategory.id); // Set the selected category
          const response = await getTagsBySubCategoryId(findCategory.id);
          setTags(response?.data.data);
        }
      }
    } catch (error) {
      console.error("Failed to fetch categories:", error);
    }
  };

  useEffect(() => {
    async function initState() {
      if (id) {
        const response = await detailMedia(id);
        const details = response.data?.data;

        setDetail(details);

        if (details.publishedForObject) {
          const publisherIds = details.publishedForObject.map(
            (obj: any) => obj.id
          );
          setSelectedPublishers(publisherIds);
        }

        const matchingCategory = categories.find(
          (category) => category.id === details.categoryId
        );

        if (matchingCategory) {
          setSelectedTarget(matchingCategory.name);
        }

        setSelectedTarget(details.categoryId); // Untuk dropdown
      }
    }
    initState();
  }, [refresh, setValue]);

  const save = async (data: ImageSchema) => {
    const requestData = {
      ...data,
      id: detail?.id,
      title: data.title,
      description: data.description,
      htmlDescription: data.description,
      fileTypeId,
      categoryId: selectedTarget,
      subCategoryId: selectedTarget,
      uploadedBy: "2b7c8d83-d298-4b19-9f74-b07924506b58",
      statusId: "1",
      publishedFor: "6",
      creatorName: data.creatorName,
      tags: "siap",
      isYoutube: false,
      isInternationalMedia: false,
    };

    const response = await createMedia(requestData);
    console.log("Form Data Submitted:", requestData);

    MySwal.fire({
      title: "Sukses",
      text: "Data berhasil disimpan.",
      icon: "success",
      confirmButtonColor: "#3085d6",
      confirmButtonText: "OK",
    }).then(() => {
      router.push("/en/contributor/content/image");
    });
  };

  const onSubmit = (data: ImageSchema) => {
    MySwal.fire({
      title: "Simpan Data",
      text: "Apakah Anda yakin ingin menyimpan data ini?",
      icon: "warning",
      showCancelButton: true,
      cancelButtonColor: "#d33",
      confirmButtonColor: "#3085d6",
      confirmButtonText: "Simpan",
    }).then((result) => {
      if (result.isConfirmed) {
        save(data);
      }
    });
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      {detail !== undefined ? (
        <div className="flex lg:flex-row gap-10">
          <Card className="w-full lg:w-8/12">
            <div className="px-6 py-6">
              <p className="text-lg font-semibold mb-3">Form Konten Foto</p>
              <div className="gap-5 mb-5">
                {/* Input Title */}
                <div className="space-y-2 py-3">
                  <Label>Judul</Label>
                  <Controller
                    control={control}
                    name="title"
                    render={({ field }) => (
                      <Input
                        size="md"
                        type="text"
                        defaultValue={detail?.title}
                        onChange={field.onChange}
                        placeholder="Enter Title"
                      />
                    )}
                  />
                  {errors.title?.message && (
                    <p className="text-red-400 text-sm">
                      {errors.title.message}
                    </p>
                  )}
                </div>
                <div className="flex items-center">
                  <div className="py-3 w-full">
                    <Label>Kategori</Label>
                    <Select
                      defaultValue={detail?.categoryId.name} // Nilai default berdasarkan detail
                      onValueChange={(id) => {
                        console.log("Selected Category:", id);
                        setSelectedTarget(id);
                      }}
                    >
                      <SelectTrigger size="md">
                        <SelectValue placeholder="Pilih" />
                      </SelectTrigger>
                      <SelectContent>
                        {categories.map((category) => (
                          <SelectItem key={category.id} value={category.id}>
                            {category.name}
                          </SelectItem>
                        ))}
                      </SelectContent>
                    </Select>
                  </div>
                </div>

                <div className="py-3">
                  <Label>Deskripsi</Label>
                  <Controller
                    control={control}
                    name="description"
                    render={({ field: { onChange, value } }) => (
                      <JoditEditor
                        ref={editor}
                        value={detail?.description}
                        onChange={onChange}
                        className="dark:text-black"
                      />
                    )}
                  />
                  {errors.description?.message && (
                    <p className="text-red-400 text-sm">
                      {errors.description.message}
                    </p>
                  )}
                </div>
              </div>
            </div>
          </Card>
          <div className="w-4/12">
            <Card className=" h-[800px]">
              <div className="px-3 py-3">
                <div className="space-y-2">
                  <Label>Kreator</Label>
                  <Controller
                    control={control}
                    name="creatorName"
                    render={({ field }) => (
                      <Input
                        size="md"
                        type="text"
                        defaultValue={detail?.creatorName}
                        onChange={field.onChange}
                        placeholder="Enter Title"
                      />
                    )}
                  />
                  {errors.creatorName?.message && (
                    <p className="text-red-400 text-sm">
                      {errors.creatorName.message}
                    </p>
                  )}
                </div>
              </div>
              <div className="mt-3 px-3">
                <Label>Pratinjau Gambar Utama</Label>
                <Card className="mt-2">
                  <img
                    src={detail.thumbnailLink}
                    alt="Thumbnail Gambar Utama"
                    className="w-full h-auto rounded"
                  />
                </Card>
              </div>
              <div className="px-3 py-3">
                <div className="space-y-2">
                  <Label>Tag</Label>
                  <div className="flex flex-wrap gap-2">
                    {detail?.tags?.split(",").map((tag, index) => (
                      <Badge
                        key={index}
                        className="border rounded-md  px-2 py-2"
                      >
                        {tag.trim()}
                      </Badge>
                    ))}
                  </div>
                </div>
              </div>
              <div className="px-3 py-3">
                <div className="flex flex-col gap-6">
                  <Label>Target Publish</Label>
                  <div className="flex gap-2 items-center">
                    <Checkbox
                      id="5"
                      checked={selectedPublishers.includes(5)}
                      onChange={() => handleCheckboxChange(5)}
                    />
                    <Label htmlFor="5">UMUM</Label>
                  </div>
                  <div className="flex gap-2 items-center">
                    <Checkbox
                      id="6"
                      checked={selectedPublishers.includes(6)}
                      onChange={() => handleCheckboxChange(6)}
                    />
                    <Label htmlFor="6">JOURNALIS</Label>
                  </div>
                  <div className="flex gap-2 items-center">
                    <Checkbox
                      id="7"
                      checked={selectedPublishers.includes(7)}
                      onChange={() => handleCheckboxChange(7)}
                    />
                    <Label htmlFor="7">POLRI</Label>
                  </div>
                  <div className="flex gap-2 items-center">
                    <Checkbox
                      id="8"
                      checked={selectedPublishers.includes(8)}
                      onChange={() => handleCheckboxChange(8)}
                    />
                    <Label htmlFor="8">KSP</Label>
                  </div>
                </div>
              </div>
              <div className="px-3 py-3 flex flex-row items-center text-blue-500 gap-2 text-sm">
                <MailIcon />
                <p className="">Kotak Saran (0)</p>
              </div>
              <div className="px-3 py-3">
                <p>Keterangan:</p>
                {/* <p>{detail?.status}</p> */}
              </div>
            </Card>
            <div className="flex flex-row justify-end gap-3">
              <div className="mt-4">
                <Button type="submit" color="primary">
                  Submit
                </Button>
              </div>
              <div className="mt-4">
                <Button type="submit" color="primary" variant="outline">
                  Cancel
                </Button>
              </div>
            </div>
          </div>
        </div>
      ) : (
        ""
      )}
    </form>
  );
}
