"use client"

import * as React from "react"
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"

import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { useToast } from "@/hooks/use-toast"
// react-hook-form + shadcn/ui Form
import {
  Form,
  FormControl,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "@/components/ui/form"
import { createVendorType } from "../service"
import { CreateVendorTypeSchema, createVendorTypeSchema } from "../validations"

export function AddVendorTypeDialog() {
  const [open, setOpen] = React.useState(false)
  const { toast } = useToast()
  const [isSubmitting, setIsSubmitting] = React.useState(false)

  // react-hook-form 세팅
  const form = useForm<CreateVendorTypeSchema>({
    resolver: zodResolver(createVendorTypeSchema),
    defaultValues: {
      nameKo: "",
      nameEn: "",
    },
    mode: "onChange", // 입력값이 변경될 때마다 유효성 검사
  })

  // 폼 값 감시
  const nameKo = form.watch("nameKo")
  const nameEn = form.watch("nameEn")
  
  // 두 필드가 모두 입력되었는지 확인
  const isFormValid = nameKo.trim() !== "" && nameEn.trim() !== ""

  async function onSubmit(data: CreateVendorTypeSchema) {
    setIsSubmitting(true)
    try {
      const result = await createVendorType(data)
      if (result.error) {
        toast({
          title: "오류 발생",
          description: result.error,
          variant: "destructive",
        })
        return
      }
      
      // 성공 시 모달 닫고 폼 리셋
      toast({
        title: "성공",
        description: "협력업체 타입이 성공적으로 생성되었습니다.",
      })
      form.reset()
      setOpen(false)
    } catch (error) {
      toast({
        title: "오류 발생",
        description: "협력업체 타입 생성 중 오류가 발생했습니다.",
        variant: "destructive",
      })
    } finally {
      setIsSubmitting(false)
    }
  }

  function handleDialogOpenChange(nextOpen: boolean) {
    if (!nextOpen) {
      form.reset()
    }
    setOpen(nextOpen)
  }

  return (
    <Dialog open={open} onOpenChange={handleDialogOpenChange}>
      {/* 모달을 열기 위한 버튼 */}
      <DialogTrigger asChild>
        <Button variant="default" size="sm">
          Add Vendor Type
        </Button>
      </DialogTrigger>

      <DialogContent>
        <DialogHeader>
          <DialogTitle>새 협력업체 타입 생성</DialogTitle>
          <DialogDescription>
            새 Vendor Type 정보를 입력하고 <b>Create</b> 버튼을 누르세요.
          </DialogDescription>
        </DialogHeader>

        {/* shadcn/ui Form을 이용해 react-hook-form과 연결 */}
        <Form {...form}>
          <form onSubmit={form.handleSubmit(onSubmit)}>
            <div className="space-y-4 py-4">
              <FormField
                control={form.control}
                name="nameKo"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>업체 유형(한글)<span className="text-red-500"> *</span></FormLabel>
                    <FormControl>
                      <Input
                        placeholder="예: 강재, 블록"
                        {...field}
                      />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />
              <FormField
                control={form.control}
                name="nameEn"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>업체 유형(영문) <span className="text-red-500"> *</span></FormLabel>
                    <FormControl>
                      <Input
                        placeholder="e.g. Steel, Block"
                        {...field}
                      />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />
            </div>

            <DialogFooter>
              <Button
                type="button"
                variant="outline"
                onClick={() => setOpen(false)}
              >
                Cancel
              </Button>
              <Button 
                type="submit" 
                disabled={isSubmitting || !isFormValid}
              >
                {isSubmitting ? "Creating..." : "Create"}
              </Button>
            </DialogFooter>
          </form>
        </Form>
      </DialogContent>
    </Dialog>
  )
}