'use client'

import { useState } from 'react'
import { useRouter, useParams } from 'next/navigation'
import { useToast } from '@/components/ui/Toast'
import { ArrowLeft, Play, Pause, AlertTriangle, Shield, Radio } from 'lucide-react'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'
import { Button } from '@/components/ui/Button'
import { SuccessTag, WarningTag, ErrorTag } from '@/components/ui/Tag'
import { Modal, ConfirmModal } from '@/components/ui/Modal'
import { ReviewSteps, getAgencyReviewSteps } from '@/components/ui/ReviewSteps'

// 模拟审核任务数据
const mockTask = {
  id: 'task-001',
  videoTitle: '夏日护肤推广',
  creatorName: '小美护肤',
  brandName: 'XX护肤品牌',
  platform: '抖音',
  aiScore: 85,
  aiSummary: '视频整体合规，发现2处硬性问题和1处舆情提示需人工确认',
  reviewSteps: [
    { key: 'submitted', label: '已提交', status: 'done' as const, time: '2/3 10:30' },
    { key: 'ai_review', label: 'AI审核', status: 'done' as const, time: '2/3 10:35' },
    { key: 'agent_review', label: '代理商审核', status: 'current' as const },
    { key: 'final', label: '最终结果', status: 'pending' as const },
  ],
  hardViolations: [
    {
      id: 'v1',
      type: '违禁词',
      content: '效果最好',
      timestamp: 15.5,
      source: 'speech',
      riskLevel: 'high',
      aiConfidence: 0.95,
      suggestion: '建议替换为"效果显著"',
    },
    {
      id: 'v2',
      type: '竞品露出',
      content: '疑似竞品Logo',
      timestamp: 42.0,
      source: 'visual',
      riskLevel: 'high',
      aiConfidence: 0.72,
      suggestion: '需人工确认是否为竞品露出',
    },
  ],
  sentimentWarnings: [
    { id: 's1', type: '油腻预警', timestamp: 42.0, content: '达人表情过于夸张，建议检查', riskLevel: 'medium' },
  ],
}

function ReviewProgressBar({ taskStatus }: { taskStatus: string }) {
  const steps = getAgencyReviewSteps(taskStatus)
  const currentStep = steps.find(s => s.status === 'current')

  return (
    <Card className="mb-6">
      <CardContent className="py-4">
        <div className="flex items-center justify-between mb-3">
          <span className="text-sm font-medium text-text-primary">审核流程</span>
          <span className="text-sm text-accent-indigo font-medium">
            当前：{currentStep?.label || '代理商审核'}
          </span>
        </div>
        <ReviewSteps steps={steps} />
      </CardContent>
    </Card>
  )
}

function RiskLevelTag({ level }: { level: string }) {
  if (level === 'high') return <ErrorTag>高风险</ErrorTag>
  if (level === 'medium') return <WarningTag>中风险</WarningTag>
  return <SuccessTag>低风险</SuccessTag>
}

function formatTimestamp(seconds: number): string {
  const mins = Math.floor(seconds / 60)
  const secs = Math.floor(seconds % 60)
  return `${mins}:${secs.toString().padStart(2, '0')}`
}

export default function ReviewPage() {
  const router = useRouter()
  const params = useParams()
  const toast = useToast()
  const [isPlaying, setIsPlaying] = useState(false)
  const [showApproveModal, setShowApproveModal] = useState(false)
  const [showRejectModal, setShowRejectModal] = useState(false)
  const [showForcePassModal, setShowForcePassModal] = useState(false)
  const [rejectReason, setRejectReason] = useState('')
  const [forcePassReason, setForcePassReason] = useState('')
  const [saveAsException, setSaveAsException] = useState(false)
  const [checkedViolations, setCheckedViolations] = useState<Record<string, boolean>>({})

  const task = mockTask

  const handleApprove = () => {
    setShowApproveModal(false)
    router.push('/agency')
  }

  const handleReject = () => {
    if (!rejectReason.trim()) {
      toast.error('请填写驳回原因')
      return
    }
    setShowRejectModal(false)
    router.push('/agency')
  }

  const handleForcePass = () => {
    if (!forcePassReason.trim()) {
      toast.error('请填写强制通过原因')
      return
    }
    setShowForcePassModal(false)
    router.push('/agency')
  }

  // 计算问题时间点用于进度条展示
  const timelineMarkers = [
    ...task.hardViolations.map(v => ({ time: v.timestamp, type: 'hard' as const })),
    ...task.sentimentWarnings.map(w => ({ time: w.timestamp, type: 'soft' as const })),
  ].sort((a, b) => a.time - b.time)

  return (
    <div className="space-y-4">
      {/* 顶部导航 */}
      <div className="flex items-center gap-4">
        <button type="button" onClick={() => router.back()} className="p-2 hover:bg-bg-elevated rounded-full">
          <ArrowLeft size={20} className="text-text-primary" />
        </button>
        <div className="flex-1">
          <h1 className="text-xl font-bold text-text-primary">{task.videoTitle}</h1>
          <p className="text-sm text-text-secondary">{task.creatorName} · {task.brandName} · {task.platform}</p>
        </div>
      </div>

      {/* 审核流程进度条 */}
      <ReviewProgressBar taskStatus="agent_reviewing" />

      <div className="grid grid-cols-1 lg:grid-cols-5 gap-6">
        {/* 左侧：视频播放器 (3/5) */}
        <div className="lg:col-span-3 space-y-4">
          <Card>
            <CardContent className="p-0">
              <div className="aspect-video bg-gray-900 rounded-t-lg flex items-center justify-center relative">
                <button
                  type="button"
                  className="w-16 h-16 bg-white/20 rounded-full flex items-center justify-center hover:bg-white/30 transition-colors"
                  onClick={() => setIsPlaying(!isPlaying)}
                >
                  {isPlaying ? <Pause size={32} className="text-white" /> : <Play size={32} className="text-white ml-1" />}
                </button>
              </div>
              {/* 智能进度条 */}
              <div className="p-4 border-t border-border-subtle">
                <div className="text-sm font-medium text-text-primary mb-3">智能进度条（点击跳转）</div>
                <div className="relative h-3 bg-bg-elevated rounded-full">
                  {/* 时间标记点 */}
                  {timelineMarkers.map((marker, idx) => (
                    <button
                      key={idx}
                      type="button"
                      className={`absolute top-1/2 -translate-y-1/2 w-4 h-4 rounded-full border-2 border-bg-card shadow-md cursor-pointer transition-transform hover:scale-125 ${
                        marker.type === 'hard' ? 'bg-accent-coral' : 'bg-orange-500'
                      }`}
                      style={{ left: `${(marker.time / 120) * 100}%` }}
                      title={`${formatTimestamp(marker.time)} - ${marker.type === 'hard' ? '硬性问题' : '舆情提示'}`}
                    />
                  ))}
                </div>
                <div className="flex justify-between text-xs text-text-tertiary mt-1">
                  <span>0:00</span>
                  <span>2:00</span>
                </div>
                <div className="flex gap-4 mt-3 text-xs text-text-secondary">
                  <span className="flex items-center gap-1">
                    <span className="w-3 h-3 bg-accent-coral rounded-full" />
                    硬性问题
                  </span>
                  <span className="flex items-center gap-1">
                    <span className="w-3 h-3 bg-orange-500 rounded-full" />
                    舆情提示
                  </span>
                  <span className="flex items-center gap-1">
                    <span className="w-3 h-3 bg-accent-green rounded-full" />
                    卖点覆盖
                  </span>
                </div>
              </div>
            </CardContent>
          </Card>

          {/* AI 分析总结 */}
          <Card>
            <CardContent className="py-4">
              <div className="flex items-center justify-between mb-2">
                <span className="font-medium text-text-primary">AI 分析总结</span>
                <span className={`text-xl font-bold ${task.aiScore >= 80 ? 'text-accent-green' : 'text-yellow-400'}`}>
                  {task.aiScore}分
                </span>
              </div>
              <p className="text-text-secondary text-sm">{task.aiSummary}</p>
            </CardContent>
          </Card>
        </div>

        {/* 右侧：AI 检查单 (2/5) */}
        <div className="lg:col-span-2 space-y-4">
          {/* 硬性合规 */}
          <Card>
            <CardHeader className="pb-2">
              <CardTitle className="flex items-center gap-2 text-base">
                <Shield size={16} className="text-red-500" />
                硬性合规 ({task.hardViolations.length})
              </CardTitle>
            </CardHeader>
            <CardContent className="space-y-3">
              {task.hardViolations.map((v) => (
                <div key={v.id} className={`p-3 rounded-lg border ${checkedViolations[v.id] ? 'bg-bg-elevated border-border-subtle' : 'bg-accent-coral/10 border-accent-coral/30'}`}>
                  <div className="flex items-start gap-2">
                    <input
                      type="checkbox"
                      checked={checkedViolations[v.id] || false}
                      onChange={() => setCheckedViolations((prev) => ({ ...prev, [v.id]: !prev[v.id] }))}
                      className="mt-1 accent-accent-indigo"
                    />
                    <div className="flex-1">
                      <div className="flex items-center gap-2 mb-1">
                        <ErrorTag>{v.type}</ErrorTag>
                        <span className="text-xs text-text-tertiary">{formatTimestamp(v.timestamp)}</span>
                      </div>
                      <p className="text-sm font-medium text-text-primary">「{v.content}」</p>
                      <p className="text-xs text-accent-indigo mt-1">{v.suggestion}</p>
                    </div>
                  </div>
                </div>
              ))}
            </CardContent>
          </Card>

          {/* 舆情雷达 */}
          {task.sentimentWarnings.length > 0 && (
            <Card>
              <CardHeader className="pb-2">
                <CardTitle className="flex items-center gap-2 text-base">
                  <Radio size={16} className="text-orange-500" />
                  舆情雷达（仅提示）
                </CardTitle>
              </CardHeader>
              <CardContent className="space-y-2">
                {task.sentimentWarnings.map((w) => (
                  <div key={w.id} className="p-3 bg-orange-500/10 rounded-lg border border-orange-500/30">
                    <div className="flex items-center gap-2 mb-1">
                      <WarningTag>{w.type}</WarningTag>
                      <span className="text-xs text-text-tertiary">{formatTimestamp(w.timestamp)}</span>
                    </div>
                    <p className="text-sm text-orange-400">{w.content}</p>
                    <p className="text-xs text-text-tertiary mt-1">⚠️ 软性风险仅作提示，不强制拦截</p>
                  </div>
                ))}
              </CardContent>
            </Card>
          )}
        </div>
      </div>

      {/* 底部决策栏 */}
      <Card className="sticky bottom-4 shadow-lg">
        <CardContent className="py-4">
          <div className="flex items-center justify-between">
            <div className="text-sm text-text-secondary">
              已检查 {Object.values(checkedViolations).filter(Boolean).length}/{task.hardViolations.length} 个问题
            </div>
            <div className="flex gap-3">
              <Button variant="danger" onClick={() => setShowRejectModal(true)}>
                驳回
              </Button>
              <Button variant="secondary" onClick={() => setShowForcePassModal(true)}>
                强制通过
              </Button>
              <Button variant="success" onClick={() => setShowApproveModal(true)}>
                通过
              </Button>
            </div>
          </div>
        </CardContent>
      </Card>

      {/* 通过确认弹窗 */}
      <ConfirmModal
        isOpen={showApproveModal}
        onClose={() => setShowApproveModal(false)}
        onConfirm={handleApprove}
        title="确认通过"
        message="确定要通过此视频的审核吗？通过后达人将收到通知。"
        confirmText="确认通过"
      />

      {/* 驳回弹窗 */}
      <Modal isOpen={showRejectModal} onClose={() => setShowRejectModal(false)} title="驳回审核">
        <div className="space-y-4">
          <p className="text-text-secondary text-sm">请填写驳回原因，已勾选的问题将自动打包发送给达人。</p>
          <div className="p-3 bg-bg-elevated rounded-lg">
            <p className="text-sm font-medium text-text-primary mb-2">已选问题 ({Object.values(checkedViolations).filter(Boolean).length})</p>
            {task.hardViolations.filter(v => checkedViolations[v.id]).map(v => (
              <div key={v.id} className="text-sm text-text-secondary">• {v.type}: {v.content}</div>
            ))}
            {Object.values(checkedViolations).filter(Boolean).length === 0 && (
              <div className="text-sm text-text-tertiary">未选择任何问题</div>
            )}
          </div>
          <div>
            <label className="block text-sm font-medium text-text-primary mb-1">补充说明</label>
            <textarea
              className="w-full h-24 p-3 border border-border-subtle rounded-lg resize-none bg-bg-elevated text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-indigo"
              placeholder="请详细说明驳回原因..."
              value={rejectReason}
              onChange={(e) => setRejectReason(e.target.value)}
            />
          </div>
          <div className="flex gap-3 justify-end">
            <Button variant="ghost" onClick={() => setShowRejectModal(false)}>取消</Button>
            <Button variant="danger" onClick={handleReject}>确认驳回</Button>
          </div>
        </div>
      </Modal>

      {/* 强制通过弹窗 */}
      <Modal isOpen={showForcePassModal} onClose={() => setShowForcePassModal(false)} title="强制通过">
        <div className="space-y-4">
          <div className="p-3 bg-yellow-500/10 rounded-lg border border-yellow-500/30">
            <p className="text-sm text-yellow-400">
              <AlertTriangle size={14} className="inline mr-1" />
              强制通过将跳过所有问题检测，操作将被记录
            </p>
          </div>
          <div>
            <label className="block text-sm font-medium text-text-primary mb-1">放行原因（必填）</label>
            <textarea
              className="w-full h-24 p-3 border border-border-subtle rounded-lg resize-none bg-bg-elevated text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-indigo"
              placeholder="例如：达人玩的新梗，品牌方认可"
              value={forcePassReason}
              onChange={(e) => setForcePassReason(e.target.value)}
            />
          </div>
          <label className="flex items-center gap-2 cursor-pointer">
            <input
              type="checkbox"
              checked={saveAsException}
              onChange={(e) => setSaveAsException(e.target.checked)}
              className="rounded accent-accent-indigo"
            />
            <span className="text-sm text-text-secondary">保存为特例（需品牌方确认后生效）</span>
          </label>
          <div className="flex gap-3 justify-end">
            <Button variant="ghost" onClick={() => setShowForcePassModal(false)}>取消</Button>
            <Button onClick={handleForcePass}>确认强制通过</Button>
          </div>
        </div>
      </Modal>
    </div>
  )
}
