"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 {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select"
import {
  Form,
  FormControl,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "@/components/ui/form"

import {
  createVendorContactSchema,
  type CreateVendorContactSchema,
} from "../validations"
import { createVendorContact } from "../service"

interface AddContactDialogProps {
  vendorId: number
}

export function AddContactDialog({ vendorId }: AddContactDialogProps) {
  const [open, setOpen] = React.useState(false)

  // 담당업무 옵션
  const taskOptions = [
    { value: "회사대표", label: "회사대표 President/Director" },
    { value: "영업관리", label: "영업관리 Sales Management" },
    { value: "설계/기술", label: "설계/기술 Engineering/Design" },
    { value: "구매", label: "구매 Procurement" },
    { value: "납기/출하/운송", label: "납기/출하/운송 Delivery Control" },
    { value: "PM/생산관리", label: "PM/생산관리 PM/Manufacturing" },
    { value: "품질관리", label: "품질관리 Quality Management" },
    { value: "세금계산서/납품서관리", label: "세금계산서/납품서관리 Shipping Doc. Management" },
    { value: "A/S 관리", label: "A/S 관리 A/S Management" },
    { value: "FSE", label: "FSE(야드작업자) Field Service Engineer" }
  ]

  // react-hook-form 세팅
  const form = useForm<CreateVendorContactSchema>({
    resolver: zodResolver(createVendorContactSchema),
    defaultValues: {
      // vendorId는 form에 표시할 필요가 없다면 hidden으로 관리하거나, submit 시 추가
      vendorId,
      contactName: "",
      contactPosition: "",
      contactDepartment: "",
      contactTask: "",
      contactEmail: "",
      contactPhone: "",
      isPrimary: false,
    },
  })

  async function onSubmit(data: CreateVendorContactSchema) {
    // 혹은 여기서 data.vendorId = vendorId; 해줘도 됨
    const result = await createVendorContact(data)
    if (result.error) {
      alert(`에러: ${result.error}`)
      return
    }
    // 성공 시 모달 닫고 폼 리셋
    form.reset()
    setOpen(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 Contact
        </Button>
      </DialogTrigger>

      <DialogContent>
        <DialogHeader>
          <DialogTitle>Create New Contact</DialogTitle>
          <DialogDescription>
            새 Contact 정보를 입력하고 <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="contactName"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>담당자명</FormLabel>
                    <FormControl>
                      <Input placeholder="예: 홍길동" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="contactPosition"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>직급</FormLabel>
                    <FormControl>
                      <Input placeholder="예: 과장" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="contactDepartment"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>부서</FormLabel>
                    <FormControl>
                      <Input placeholder="예: 영업부" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="contactTask"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>담당업무</FormLabel>
                    <Select onValueChange={field.onChange} value={field.value || undefined}>
                      <FormControl>
                        <SelectTrigger>
                          <SelectValue placeholder="담당업무를 선택하세요" />
                        </SelectTrigger>
                      </FormControl>
                      <SelectContent>
                        {taskOptions.map((option) => (
                          <SelectItem key={option.value} value={option.value}>
                            {option.label}
                          </SelectItem>
                        ))}
                      </SelectContent>
                    </Select>
                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="contactEmail"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>이메일</FormLabel>
                    <FormControl>
                      <Input placeholder="name@company.com" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="contactPhone"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>전화번호</FormLabel>
                    <FormControl>
                      <Input placeholder="010-1234-5678" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />

              
            </div>

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