"use client"

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

import {
  Sheet,
  SheetContent,
  SheetDescription,
  SheetHeader,
  SheetTitle,
} from "@/components/ui/sheet"
import {
  Form,
  FormControl,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "@/components/ui/form"
import { Button } from "@/components/ui/button"
import { Textarea } from "@/components/ui/textarea"
import { updateSafetyQualification } from "../service"

const formSchema = z.object({
  safetyQualificationContent: z.string().min(1, "안전적격성 평가 내용을 입력해주세요."),
})

interface SafetyQualificationUpdateSheetProps {
  open: boolean
  onOpenChange: (open: boolean) => void
  registrationId?: number
  vendorName?: string
  currentContent?: string | null
  onSuccess?: () => void
}

export function SafetyQualificationUpdateSheet({
  open,
  onOpenChange,
  registrationId,
  vendorName,
  currentContent,
  onSuccess,
}: SafetyQualificationUpdateSheetProps) {
  const [isLoading, setIsLoading] = React.useState(false)

  const form = useForm<z.infer<typeof formSchema>>({
    resolver: zodResolver(formSchema),
    defaultValues: {
      safetyQualificationContent: currentContent || "",
    },
  })

  // 폼 값 초기화
  React.useEffect(() => {
    if (open) {
      form.reset({
        safetyQualificationContent: currentContent || "",
      })
    }
  }, [open, currentContent, form])

  async function onSubmit(values: z.infer<typeof formSchema>) {
    if (!registrationId) {
      toast.error("등록 ID가 없습니다.")
      return
    }

    setIsLoading(true)
    try {
      const result = await updateSafetyQualification(
        registrationId,
        values.safetyQualificationContent
      )

      if (result.success) {
        toast.success("안전적격성 평가가 등록되었습니다.")
        onOpenChange(false)
        onSuccess?.()
      } else {
        toast.error(result.error || "안전적격성 평가 등록에 실패했습니다.")
      }
    } catch (error) {
      console.error("안전적격성 평가 등록 오류:", error)
      toast.error("안전적격성 평가 등록 중 오류가 발생했습니다.")
    } finally {
      setIsLoading(false)
    }
  }

  return (
    <Sheet open={open} onOpenChange={onOpenChange}>
      <SheetContent className="w-[400px] sm:w-[540px]">
        <SheetHeader>
          <SheetTitle>안전적격성 평가 입력</SheetTitle>
          <SheetDescription>
            {vendorName && `${vendorName}의 `}안전적격성 평가 내용을 입력해주세요.
          </SheetDescription>
        </SheetHeader>

        <Form {...form}>
          <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6 mt-6">
            <FormField
              control={form.control}
              name="safetyQualificationContent"
              render={({ field }) => (
                <FormItem>
                  <FormLabel>안전적격성 평가 내용</FormLabel>
                  <FormControl>
                    <Textarea
                      placeholder="안전적격성 평가 결과 및 내용을 입력해주세요..."
                      className="min-h-[200px]"
                      {...field}
                    />
                  </FormControl>
                  <FormMessage />
                </FormItem>
              )}
            />

            <div className="flex justify-end space-x-2">
              <Button
                type="button"
                variant="outline"
                onClick={() => onOpenChange(false)}
                disabled={isLoading}
              >
                취소
              </Button>
              <Button type="submit" disabled={isLoading}>
                {isLoading ? "저장 중..." : "저장"}
              </Button>
            </div>
          </form>
        </Form>
      </SheetContent>
    </Sheet>
  )
}
