'use client'

import { useState, useTransition } from 'react'
import { useRouter } from 'next/navigation'
import { Button } from '@/components/ui/button'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import { useToast } from '@/hooks/use-toast'
import { Save, RefreshCw } from 'lucide-react'
import { BiddingNoticeTemplate } from '@/db/schema/bidding'
import { saveBiddingNoticeTemplate, saveBiddingNotice } from './service'
import TiptapEditor from '@/components/qna/tiptap-editor'

interface BiddingNoticeEditorProps {
  initialData: BiddingNoticeTemplate | null
  biddingId?: number // 입찰 ID (있으면 일반 입찰공고, 없으면 템플릿)
  templateType?: string // 템플릿 타입 (템플릿 저장 시 사용)
  onSaveSuccess?: () => void // 저장 성공 시 콜백
  onTemplateUpdate?: (template: BiddingNoticeTemplate) => void // 템플릿 업데이트 콜백
}

export function BiddingNoticeEditor({ initialData, biddingId, templateType, onSaveSuccess, onTemplateUpdate }: BiddingNoticeEditorProps) {
  const getDefaultTitle = (type?: string) => {
    switch (type) {
      case 'facility':
        return '시설재 입찰공고문'
      case 'unit_price':
        return '단가계약 입찰공고문'
      default:
        return '표준 입찰공고문'
    }
  }

  const [title, setTitle] = useState(initialData?.title || getDefaultTitle(templateType))
  const [content, setContent] = useState(initialData?.content || getDefaultTemplate())
  const [isPending, startTransition] = useTransition()
  const { toast } = useToast()
  const router = useRouter()

  const handleSave = () => {
    if (!title.trim()) {
      toast({
        title: '오류',
        description: '제목을 입력해주세요.',
        variant: 'destructive',
      })
      return
    }

    if (!content.trim()) {
      toast({
        title: '오류',
        description: '내용을 입력해주세요.',
        variant: 'destructive',
      })
      return
    }

    startTransition(async () => {
      try {
        if (biddingId) {
          // 일반 입찰공고 저장
          await saveBiddingNotice(biddingId, { title, content })
          toast({
            title: '성공',
            description: '입찰공고문이 저장되었습니다.',
          })
        } else {
          // 템플릿 저장
          if (!templateType) {
            toast({
              title: '오류',
              description: '템플릿 타입이 지정되지 않았습니다.',
              variant: 'destructive',
            })
            return
          }

          const savedTemplate = await saveBiddingNoticeTemplate({ title, content, type: templateType })
          toast({
            title: '성공',
            description: '입찰공고문 템플릿이 저장되었습니다.',
          })

          // 템플릿 업데이트 콜백 호출
          if (onTemplateUpdate && savedTemplate) {
            // 저장된 템플릿 데이터를 가져와서 콜백 호출
            const updatedTemplate = {
              ...initialData,
              title,
              content,
              type: templateType,
              updatedAt: new Date(),
            } as BiddingNoticeTemplate
            onTemplateUpdate(updatedTemplate)
          }
        }
        router.refresh()
        
        // 저장 성공 시 콜백 호출
        onSaveSuccess?.()
      } catch (error) {
        toast({
          title: '오류',
          description: error instanceof Error ? error.message : '저장에 실패했습니다.',
          variant: 'destructive',
        })
      }
    })
  }

  // const handleReset = () => {
  //   if (confirm('기본 템플릿으로 초기화하시겠습니까? 현재 내용은 삭제됩니다.')) {
  //     setTitle(getDefaultTitle(templateType))
  //     setContent(getDefaultTemplate())
  //     toast({
  //       title: '초기화 완료',
  //       description: '기본 템플릿으로 초기화되었습니다.',
  //     })
  //   }
  // }

  return (
    <div className="space-y-6">
      {/* 제목 입력 */}
      <div className="space-y-2">
        <Label htmlFor="title">템플릿 제목</Label>
        <Input
          id="title"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
          placeholder="입찰공고문 제목을 입력하세요"
          disabled={isPending}
        />
      </div>

      {/* 에디터 */}
      <div className="space-y-2">
        <Label>공고문 내용</Label>
        <div className="border rounded-lg">
          <TiptapEditor
            content={content}
            setContent={setContent}
            disabled={isPending}
            height="500px"
          />
        </div>
      </div>

      {/* 액션 버튼 */}
      <div className="flex items-center gap-4 pt-4">
        <Button 
          onClick={handleSave} 
          disabled={isPending}
          className="min-w-[120px]"
        >
          {isPending ? (
            <>
              <RefreshCw className="w-4 h-4 mr-2 animate-spin" />
              저장 중...
            </>
          ) : (
            <>
              <Save className="w-4 h-4 mr-2" />
              저장
            </>
          )}
        </Button>
        
        {/* <Button 
          variant="outline" 
          onClick={handleReset}
          disabled={isPending}
        >
          기본 템플릿으로 초기화
        </Button> */}

        {initialData && (
          <div className="ml-auto text-sm text-muted-foreground">
            마지막 업데이트: {new Date(initialData.updatedAt).toLocaleString('ko-KR')}
          </div>
        )}
      </div>
    </div>
  )
}

// 기본 템플릿 함수
function getDefaultTemplate(): string {
  return `
<h1>입찰공고</h1>

<h2>1. 입찰 개요</h2>
<ul>
  <li><strong>공고명:</strong> [입찰 공고명을 입력하세요]</li>
  <li><strong>입찰방식:</strong> [일반경쟁입찰/제한경쟁입찰]</li>
  <li><strong>입찰공고번호:</strong> [공고번호]</li>
  <li><strong>공고일자:</strong> [YYYY년 MM월 DD일]</li>
</ul>

<h2>2. 입찰 참가자격</h2>
<ul>
  <li>관련 업종의 사업자등록증을 보유한 업체</li>
  <li>부가가치세법에 의한 사업자등록증을 보유한 업체</li>
  <li>기타 관련 법령에 따른 자격 요건을 갖춘 업체</li>
</ul>

<h2>3. 입찰 일정</h2>
<table>
  <thead>
    <tr>
      <th>구분</th>
      <th>일시</th>
      <th>장소</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>입찰 공고</td>
      <td>[YYYY.MM.DD]</td>
      <td>-</td>
    </tr>
    <tr>
      <td>현장설명</td>
      <td>[YYYY.MM.DD HH:MM]</td>
      <td>[현장 주소]</td>
    </tr>
    <tr>
      <td>입찰서 접수</td>
      <td>[YYYY.MM.DD HH:MM까지]</td>
      <td>[접수 장소]</td>
    </tr>
    <tr>
      <td>개찰</td>
      <td>[YYYY.MM.DD HH:MM]</td>
      <td>[개찰 장소]</td>
    </tr>
  </tbody>
</table>

<h2>4. 입찰 대상</h2>
<ul>
  <li><strong>사업명:</strong> [사업명을 입력하세요]</li>
  <li><strong>사업내용:</strong> [상세 사업내용]</li>
  <li><strong>사업기간:</strong> [계약일로부터 OO일 이내]</li>
  <li><strong>사업장소:</strong> [사업 수행 장소]</li>
</ul>

<h2>5. 제출 서류</h2>
<ul>
  <li>입찰서 및 투찰서</li>
  <li>사업자등록증 사본</li>
  <li>법인등기부등본 (법인의 경우)</li>
  <li>업체현황서</li>
  <li>기타 입찰 참가자격 증명서류</li>
</ul>

<h2>6. 기타 사항</h2>
<ul>
  <li>본 입찰공고에 명시되지 않은 사항은 관련 법령에 따릅니다.</li>
  <li>기타 문의사항은 아래 연락처로 문의하시기 바랍니다.</li>
</ul>

<blockquote>
<p><strong>문의처:</strong><br>
담당자: [담당자명]<br>
전화: [전화번호]<br>
이메일: [이메일주소]</p>
</blockquote>
  `.trim()
}