"use client"

import * as React from "react"
import { type ColumnDef } from "@tanstack/react-table"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import {
  Eye, Calendar, FileText, DollarSign, TrendingUp, TrendingDown, MoreHorizontal
} from "lucide-react"
import {
  Tooltip,
  TooltipContent,
  TooltipProvider,
  TooltipTrigger,
} from "@/components/ui/tooltip"
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuSeparator,
  DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header"
import {
  biddingStatusLabels,
  contractTypeLabels,
} from "@/db/schema"
import { formatDate } from "@/lib/utils"
import { DataTableRowAction } from "@/types/table"

type BiddingSelectionItem = {
  id: number
  biddingNumber: string
  originalBiddingNumber: string | null
  title: string
  status: string
  contractType: string
  prNumber: string | null
  submissionStartDate: Date | null
  submissionEndDate: Date | null
  bidPicName: string | null
  supplyPicName: string | null
  createdBy: string | null
  createdAt: Date | null
  updatedAt: Date | null

  // 입찰 결과 정보 (개찰 이후에만 의미 있음)
  participantCount?: number
  submittedCount?: number
  avgBidPrice?: number | null
  minBidPrice?: number | null
  maxBidPrice?: number | null
  targetPrice?: number | null
  currency?: string | null
}

interface GetColumnsProps {
  setRowAction: React.Dispatch<React.SetStateAction<DataTableRowAction<BiddingSelectionItem> | null>>
}

// 상태별 배지 색상
const getStatusBadgeVariant = (status: string) => {
  switch (status) {
    case 'bidding_opened':
      return 'default'
    case 'bidding_closed':
      return 'outline'
    case 'evaluation_of_bidding':
      return 'secondary'
    case 'vendor_selected':
      return 'default'
    default:
      return 'outline'
  }
}

// 금액 포맷팅
const formatCurrency = (amount: string | number | null, currency = 'KRW') => {
  if (!amount) return '-'

  const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount
  if (isNaN(numAmount)) return '-'

  return new Intl.NumberFormat('ko-KR', {
    style: 'currency',
    currency: currency,
    minimumFractionDigits: 0,
    maximumFractionDigits: 0,
  }).format(numAmount)
}

export function getBiddingsSelectionColumns({ setRowAction }: GetColumnsProps): ColumnDef<BiddingSelectionItem>[] {

  return [
    // ░░░ 입찰번호 ░░░
    {
      accessorKey: "biddingNumber",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="입찰번호" />,
      cell: ({ row }) => (
        <div className="font-mono text-sm">
          {row.original.biddingNumber}
        </div>
      ),
      size: 120,
      meta: { excelHeader: "입찰번호" },
    },

    // ░░░ 입찰명 ░░░
    {
      accessorKey: "title",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="입찰명" />,
      cell: ({ row }) => (
        <div className="truncate max-w-[200px]" title={row.original.title}>
          <Button
            variant="link"
            className="p-0 h-auto text-left justify-start font-bold underline"
            onClick={() => setRowAction({ row, type: "view" })}
          >
            <div className="whitespace-pre-line">
              {row.original.title}
            </div>
          </Button>
        </div>
      ),
      size: 200,
      meta: { excelHeader: "입찰명" },
    },

    // ░░░ 원입찰번호 ░░░
    {
      accessorKey: "originalBiddingNumber",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="원입찰번호" />,
      cell: ({ row }) => (
        <div className="font-mono text-sm">
          {row.original.originalBiddingNumber || '-'}
        </div>
      ),
      size: 120,
      meta: { excelHeader: "원입찰번호" },
    },

    // ░░░ 진행상태 ░░░
    {
      accessorKey: "status",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="진행상태" />,
      cell: ({ row }) => (
        <Badge variant={getStatusBadgeVariant(row.original.status)}>
          {biddingStatusLabels[row.original.status]}
        </Badge>
      ),
      size: 120,
      meta: { excelHeader: "진행상태" },
    },

    // ░░░ 계약구분 ░░░
    {
      accessorKey: "contractType",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="계약구분" />,
      cell: ({ row }) => (
        <Badge variant="outline">
          {contractTypeLabels[row.original.contractType]}
        </Badge>
      ),
      size: 100,
      meta: { excelHeader: "계약구분" },
    },

    // ░░░ 입찰제출기간 ░░░
    {
      id: "submissionPeriod",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="입찰제출기간" />,
      cell: ({ row }) => {
        const startDate = row.original.submissionStartDate
        const endDate = row.original.submissionEndDate

        if (!startDate || !endDate) return <span className="text-muted-foreground">-</span>

        const startObj = new Date(startDate)
        const endObj = new Date(endDate)
        // 비교로직만 유지, 색상표기/마감뱃지 제거
        // UI 표시용 KST 변환
        const formatKst = (d: Date) => new Date(d.getTime() + 9 * 60 * 60 * 1000).toISOString().slice(0, 16).replace('T', ' ')

        return (
          <div className="text-xs">
            <div>
              {formatKst(startObj)} ~ {formatKst(endObj)}
            </div>
          </div>
        )
      },
      size: 140,
      meta: { excelHeader: "입찰제출기간" },
    },

    // ░░░ 입찰담당자 ░░░
    {
      accessorKey: "bidPicName",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="입찰담당자" />,
      cell: ({ row }) => {
        const bidPic = row.original.bidPicName
        const supplyPic = row.original.supplyPicName

        const displayName = bidPic || supplyPic || "-"
        return <span className="text-sm">{displayName}</span>
      },
      size: 100,
      meta: { excelHeader: "입찰담당자" },
    },

    // ░░░ P/R번호 ░░░
    {
      accessorKey: "prNumber",
      header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="P/R번호" />,
      cell: ({ row }) => (
        <span className="font-mono text-sm">{row.original.prNumber || '-'}</span>
      ),
      size: 100,
      meta: { excelHeader: "P/R번호" },
    },

    // ░░░ 참여업체수 ░░░
    // {
    //   id: "participantCount",
    //   header: ({ column }) => <DataTableColumnHeaderSimple column={column} title="참여업체수" />,
    //   cell: ({ row }) => {
    //     const count = row.original.participantCount || 0
    //     return (
    //       <div className="flex items-center gap-1">
    //         <span className="text-sm font-medium">{count}</span>
    //       </div>
    //     )
    //   },
    //   size: 100,
    //   meta: { excelHeader: "참여업체수" },
    // },


    // ═══════════════════════════════════════════════════════════════
    // 액션
    // ═══════════════════════════════════════════════════════════════
    {
      id: "actions",
      header: "작업",
      cell: ({ row }) => (
        <DropdownMenu>
          <DropdownMenuTrigger asChild>
            <Button variant="ghost" className="h-8 w-8 p-0">
              <span className="sr-only">메뉴 열기</span>
              <MoreHorizontal className="h-4 w-4" />
            </Button>
          </DropdownMenuTrigger>
          <DropdownMenuContent align="end">
            <DropdownMenuItem onClick={() => setRowAction({ row, type: "view" })}>
              <Eye className="mr-2 h-4 w-4" />
              상세보기
            </DropdownMenuItem>
          </DropdownMenuContent>
        </DropdownMenu>
      ),
      size: 50,
      enableSorting: false,
      enableHiding: false,
    },
  ]
}
