'use client'

import { useState, useEffect, useMemo } from 'react'
import { useLocale } from 'next-intl'
import type { TrumpPost } from '@/types'
import { getPosts } from '@/lib/api'
import { swrFetch } from '@/lib/cache'
import PostRow from '@/components/dashboard/PostCards'
import SystemControl from '@/components/signals/SystemControl'

/**
 * System 1 — Trump (event-driven scalp). Its own dedicated page.
 * Shows ONLY source === 'truth'. No scanner panel (that's System 2).
 */

const SENTIMENTS = ['all', 'bullish', 'bearish', 'neutral'] as const
type SentimentFilter = (typeof SENTIMENTS)[number]
type SignalFilter = 'all' | 'actionable' | 'buy' | 'short'

interface TrumpSignalPageProps {
  initialPosts?: TrumpPost[] | null
}

export default function TrumpSignalPage({ initialPosts = null }: TrumpSignalPageProps) {
  const locale = useLocale()
  const isZh = false  // i18n shelved — Chinese branches kept as dead code for future revival; see messages/zh.json
  const [posts, setPosts]     = useState<TrumpPost[]>(initialPosts ?? [])
  const [loading, setLoading] = useState(initialPosts === null)
  const [loadErr, setLoadErr] = useState('')
  const [sentFilter, setSentFilter] = useState<SentimentFilter>('all')
  const [sigFilter, setSigFilter]   = useState<SignalFilter>('all')

  useEffect(() => {
    swrFetch(
      'posts-500',
      3 * 60_000, // 3 min TTL
      () => getPosts(500, 1),
      fresh => setPosts(fresh), // background revalidation callback
    )
      .then(p => { setPosts(p); setLoadErr('') })
      .catch(e => setLoadErr(e instanceof Error ? e.message : (isZh ? '帖子加载失败' : 'Failed to load posts')))
      .finally(() => setLoading(false))
  }, [isZh])

  const trumpPosts = useMemo(
    () => posts.filter(p => (p.source || '') === 'truth'),
    [posts],
  )
  const filtered = useMemo(() => trumpPosts.filter(p => {
    if (sentFilter !== 'all' && p.sentiment !== sentFilter) return false
    if (sigFilter === 'actionable' && p.signal !== 'buy' && p.signal !== 'short') return false
    if (sigFilter === 'buy'   && p.signal !== 'buy')   return false
    if (sigFilter === 'short' && p.signal !== 'short') return false
    return true
  }), [trumpPosts, sentFilter, sigFilter])

  const sigCounts = useMemo(() => ({
    all:        trumpPosts.length,
    actionable: trumpPosts.filter(p => p.signal === 'buy' || p.signal === 'short').length,
    buy:        trumpPosts.filter(p => p.signal === 'buy').length,
    short:      trumpPosts.filter(p => p.signal === 'short').length,
  }), [trumpPosts])

  const signalLabels: Record<SignalFilter, string> = {
    all: isZh ? '全部' : 'All',
    actionable: isZh ? '可执行' : 'Actionable',
    buy: isZh ? '做多' : 'Buy',
    short: isZh ? '做空' : 'Short',
  }

  const sentimentLabels: Record<SentimentFilter, string> = {
    all: isZh ? '全部' : 'All',
    bullish: isZh ? '看多' : 'Bullish',
    bearish: isZh ? '看空' : 'Bearish',
    neutral: isZh ? '中性' : 'Neutral',
  }

  return (
    <div className="page">
      <div className="page-head">
        <div>
          <h1 className="page-title">{isZh ? '① Trump 信号' : '① Trump Signal'}</h1>
          <p className="page-sub">
            {`Event-driven scalp · ${sigCounts.actionable} actionable · ${trumpPosts.length} posts`}
          </p>
        </div>
        <span className="chip"><span className="live-dot" />Live</span>
      </div>

      <div style={{ fontSize: 12, color: 'var(--ink-3)', lineHeight: 1.5, marginBottom: 12 }}>
        This engine watches Trump Truth Social in real time, classifies each post, and only opens trades on high-confidence market-moving events. It is built for tight risk, short holds, and a 12-hour cooldown between entries.
      </div>

      <SystemControl system="trump" />

      <div style={{
        display: 'flex', justifyContent: 'space-between', alignItems: 'center',
        gap: 12, margin: '16px 0 12px', flexWrap: 'wrap',
      }}>
        <div className="nav-tabs" style={{ background: 'var(--bg-sunk)' }}>
          {([
            { key: 'all' },
            { key: 'actionable' },
            { key: 'buy' },
            { key: 'short' },
          ] as const).map(f => (
            <button
              key={f.key}
              className={`nav-tab ${sigFilter === f.key ? 'active' : ''}`}
              onClick={() => setSigFilter(f.key)}
            >
              {f.key === 'actionable' && !isZh ? '🔥 ' : ''}
              {f.key === 'actionable' && isZh ? '🔥 ' : ''}
              {signalLabels[f.key]}
              <span style={{ color: 'var(--ink-4)', marginLeft: 4 }}>{sigCounts[f.key]}</span>
            </button>
          ))}
        </div>
        <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap' }}>
          {SENTIMENTS.map(f => (
            <button
              key={f}
              onClick={() => setSentFilter(f)}
              style={{
                padding: '4px 10px', borderRadius: 6, border: '1px solid var(--line)',
                background: sentFilter === f ? 'var(--ink)' : 'transparent',
                color: sentFilter === f ? 'var(--bg)' : 'var(--ink-3)',
                fontSize: 11, cursor: 'pointer', fontWeight: sentFilter === f ? 600 : 400,
              }}
            >
              {sentimentLabels[f]}
            </button>
          ))}
        </div>
      </div>

      {loading && <TrumpSkeleton />}
      {!loading && loadErr && (
        <div className="card" style={{ padding: 24, textAlign: 'center', color: 'var(--down)' }}>
          ⚠️ {`Couldn’t load signals — ${loadErr}`}
          <div style={{ marginTop: 10 }}>
            <button className="btn ghost" style={{ fontSize: 12, padding: '6px 14px' }}
              onClick={() => location.reload()}>{isZh ? '重试' : 'Retry'}</button>
          </div>
        </div>
      )}
      {!loading && !loadErr && filtered.length === 0 && (
        <div className="card" style={{ padding: 48, textAlign: 'center', color: 'var(--ink-3)' }}>
          No Trump signals match the current filter.
        </div>
      )}
      {!loading && filtered.length > 0 && (
        <div className="post-stream">
          {filtered.map(p => <PostRow key={p.id} post={p} />)}
        </div>
      )}
    </div>
  )
}

function TrumpSkeleton() {
  return (
    <div className="post-stream" style={{ marginTop: 8 }}>
      {Array.from({ length: 6 }).map((_, i) => (
        <div key={i} className="skeleton-card" style={{ marginBottom: 8 }}>
          <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
            <div className="skeleton sk-line sk-w-q" />
            <div className="skeleton sk-line" style={{ width: 60 }} />
          </div>
          <div className="skeleton sk-title sk-w-3q" />
          <div className="skeleton sk-line sk-w-full" />
          <div className="skeleton sk-line sk-w-half" />
          <div style={{ display: 'flex', gap: 8, marginTop: 4 }}>
            <div className="skeleton sk-line-sm" style={{ width: 56 }} />
            <div className="skeleton sk-line-sm" style={{ width: 80 }} />
            <div className="skeleton sk-line-sm" style={{ width: 64 }} />
          </div>
        </div>
      ))}
    </div>
  )
}
