"use client";
import React, { 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 { 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 { createTask } from "@/service/task";

const taskSchema = z.object({
  title: z.string().min(1, { message: "Judul diperlukan" }),
  naration: z.string().min(2, {
    message: "Narasi Penugasan harus lebih dari 2 karakter.",
  }),
});

export default function FormTask() {
  const MySwal = withReactContent(Swal);
  const router = useRouter();
  const editor = useRef(null);
  type TaskSchema = z.infer<typeof taskSchema>;

  // State for various form fields
  const [taskOutput, setTaskOutput] = useState({
    all: false,
    video: false,
    audio: false,
    image: false,
    text: false,
  });

  const [assignmentType, setAssignmentType] = useState("mediahub");
  const [assignmentCategory, setAssignmentCategory] = useState("publication");
  const [mainType, setMainType] = useState<number>(1); // untuk Tipe Penugasan
  const [type, setType] = useState<string>("1");
  const [selectedTarget, setSelectedTarget] = useState("all");

  const [platformTypeVisible, setPlatformTypeVisible] = useState(false);
  const [unitSelection, setUnitSelection] = useState({
    allUnit: false,
    mabes: false,
    polda: false,
    polres: false,
  });

  const {
    control,
    handleSubmit,
    formState: { errors },
  } = useForm<TaskSchema>({
    resolver: zodResolver(taskSchema),
  });

  const handleRadioChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    const selectedValue = Number(event.target.value);
    setMainType(selectedValue);

    setPlatformTypeVisible(selectedValue === 2);
  };

  const save = async (data: TaskSchema) => {
    const requestData = {
      ...data,
      assignmentType,
      assignmentCategory,
      target: selectedTarget,
      unitSelection,
      assignedToRole: "3",
      assignmentMainTypeId: 1,
      assignmentPurpose: "1",
      assignmentTypeId: type,
      fileTypeOutput: taskOutput,
      id: null,
      narration: data.naration,
      platformType: "",
      title: data.title,
    };

    const response = await createTask(requestData);

    // if (response.error) {
    //   error(response.message);
    //   return false;
    // }

    console.log("Form Data Submitted:", requestData);
    console.log("response", response);

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

  const onSubmit = (data: TaskSchema) => {
    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 (
    <Card>
      <div className="px-6 py-6">
        <p className="text-lg font-semibold mb-3">Form Penugasan</p>
        <form onSubmit={handleSubmit(onSubmit)}>
          <div className="gap-5 mb-5">
            {/* Input Title */}
            <div className="space-y-2">
              <Label>Judul</Label>
              <Controller
                control={control}
                name="title"
                render={({ field }) => (
                  <Input
                    size="md"
                    type="text"
                    value={field.value}
                    onChange={field.onChange}
                    placeholder="Enter Title"
                  />
                )}
              />
              {errors.title?.message && (
                <p className="text-red-400 text-sm">{errors.title.message}</p>
              )}
            </div>
            <div className="flex flex-row items-center">
              <div className="mt-5">
                <Label>Tujuan Pemilihan Tugas</Label>
                <Select onValueChange={setSelectedTarget}>
                  <SelectTrigger size="md">
                    <SelectValue placeholder="Pilih" />
                  </SelectTrigger>
                  <SelectContent>
                    <SelectItem value="all">Semua Pengguna</SelectItem>
                    <SelectItem value="contributor">Kontributor</SelectItem>
                    <SelectItem value="approver">Approver</SelectItem>
                  </SelectContent>
                </Select>
              </div>
              <div className="flex flex-wrap gap-3 mt-5 pt-5 ml-3">
                {Object.keys(unitSelection).map((key) => (
                  <div className="flex items-center gap-2" key={key}>
                    <Checkbox
                      id={key}
                      checked={unitSelection[key as keyof typeof unitSelection]}
                      onCheckedChange={(value) =>
                        setUnitSelection({ ...unitSelection, [key]: value })
                      }
                    />
                    <Label htmlFor={key}>
                      {key.charAt(0).toUpperCase() + key.slice(1)}
                    </Label>
                  </div>
                ))}
              </div>
            </div>
            <div className="mt-5">
              <Label>Tipe Penugasan</Label>
              <RadioGroup
                value={String(mainType)}
                onValueChange={(value) => setMainType(Number(value))}
                className="flex flex-wrap gap-6"
              >
                <RadioGroupItem value="1" id="mediahub" />
                <Label htmlFor="mediahub">Mediahub</Label>
                <RadioGroupItem value="2" id="medsos-mediahub" />
                <Label htmlFor="medsos-mediahub">Medsos Mediahub</Label>
              </RadioGroup>
            </div>

            {/* RadioGroup Assignment Category */}
            <div className="mt-5">
              <Label>Jenis Penugasan</Label>
              <RadioGroup
                value={type} // State yang dipetakan ke value RadioGroup
                onValueChange={(value) => setType(value)} // Mengubah nilai state ketika pilihan berubah
                className="flex flex-wrap gap-6"
              >
                <div className="flex items-center gap-2">
                  <RadioGroupItem value="1" id="publication" />
                  <Label htmlFor="publication">Publikasi</Label>
                </div>
                <div className="flex items-center gap-2">
                  <RadioGroupItem value="2" id="amplification" />
                  <Label htmlFor="amplification">Amplifikasi</Label>
                </div>
                <div className="flex items-center gap-2">
                  <RadioGroupItem value="3" id="contra" />
                  <Label htmlFor="contra">Kontra</Label>
                </div>
              </RadioGroup>
            </div>

            <div className="mt-5">
              <Label>Output Tugas</Label>
              <div className="flex flex-wrap gap-3">
                {Object.keys(taskOutput).map((key) => (
                  <div className="flex items-center gap-2" key={key}>
                    <Checkbox
                      id={key}
                      checked={taskOutput[key as keyof typeof taskOutput]}
                      onCheckedChange={(value) =>
                        setTaskOutput({ ...taskOutput, [key]: value })
                      }
                    />
                    <Label htmlFor={key}>
                      {key.charAt(0).toUpperCase() + key.slice(1)}
                    </Label>
                  </div>
                ))}
              </div>
            </div>
            <div className="mt-5">
              <Label>Narasi Penugasan</Label>
              <Controller
                control={control}
                name="naration"
                render={({ field: { onChange, value } }) => (
                  <JoditEditor
                    ref={editor}
                    value={value}
                    onChange={onChange}
                    className="dark:text-black"
                  />
                )}
              />
              {errors.naration?.message && (
                <p className="text-red-400 text-sm">
                  {errors.naration.message}
                </p>
              )}
            </div>
          </div>

          {/* Submit Button */}
          <div className="mt-4">
            <Button type="submit" color="primary">
              Submit
            </Button>
          </div>
        </form>
      </div>
    </Card>
  );
}
