'use client';
import { useState, useEffect } from 'react';
import { useTranslations } from 'next-intl';

type Stats = {
  todayUV: number;
  todayPV: number;
  userCount: number;
  postCount: number;
  dailyStats: { viewDate: string; uv: number; pv: number }[];
  eventCounts: { eventType: string; count: number }[];
  topPosts: { id: number; title: string; titleEn: string | null; slug: string; likeCount: number; dislikeCount: number }[];
};

export function AdminOverview() {
  const t = useTranslations('admin');
  const [stats, setStats] = useState<Stats | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch('/api/stats?days=7')
      .then(r => {
        if (!r.ok) throw new Error(`HTTP ${r.status}`);
        return r.json();
      })
      .then(data => setStats(data))
      .catch(() => setStats(null))
      .finally(() => setLoading(false));
  }, []);

  if (loading) return <div>加载中...</div>;
  if (!stats) return <div>无数据</div>;

  const dailyStats = stats.dailyStats ?? [];
  const eventCounts = stats.eventCounts ?? [];
  const topPosts = stats.topPosts ?? [];
  const maxUV = Math.max(1, ...dailyStats.map(d => d.uv));

  return (
    <>
      <div className="stats-grid">
        <div className="stat-card">
          <div className="stat-label">{t('todayUV')}</div>
          <div className="stat-value">{stats.todayUV}</div>
        </div>
        <div className="stat-card">
          <div className="stat-label">{t('todayPV')}</div>
          <div className="stat-value">{stats.todayPV}</div>
        </div>
        <div className="stat-card">
          <div className="stat-label">{t('users')}</div>
          <div className="stat-value">{stats.userCount}</div>
        </div>
        <div className="stat-card">
          <div className="stat-label">{t('posts')}</div>
          <div className="stat-value">{stats.postCount}</div>
        </div>
      </div>

      <h3 style={{ marginBottom: '1rem' }}>{t('recent7d')}</h3>
      <div style={{ display: 'flex', gap: '0.5rem', alignItems: 'flex-end', height: '180px', padding: '1rem 0', borderBottom: '1px solid var(--rule)', marginBottom: '2rem' }}>
        {dailyStats.slice(0, 7).reverse().map(d => (
          <div key={d.viewDate} style={{ flex: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', gap: '0.3rem' }}>
            <div style={{ fontSize: '0.7rem', color: 'var(--accent2)', fontFamily: 'var(--font-mono)' }}>{d.uv}</div>
            <div style={{
              width: '100%', maxWidth: '40px',
              height: `${(d.uv / maxUV) * 100}%`,
              background: 'linear-gradient(180deg, var(--accent), var(--accent2))',
              borderRadius: '4px 4px 0 0',
              minHeight: '2px',
            }} title={`UV: ${d.uv}, PV: ${d.pv}`} />
            <div style={{ fontSize: '0.7rem', color: 'var(--muted)', fontFamily: 'var(--font-mono)' }}>
              {d.viewDate.slice(5)}
            </div>
          </div>
        ))}
      </div>

      <h3 style={{ marginBottom: '1rem' }}>{t('topPosts')}</h3>
      <table className="post-list-table">
        <thead>
          <tr><th>{t('posts')}</th><th>♥</th><th>✗</th></tr>
        </thead>
        <tbody>
          {topPosts.map(p => (
            <tr key={p.id}>
              <td><a href={`/blog/${p.slug}`}>{p.title || p.titleEn}</a></td>
              <td>{p.likeCount}</td>
              <td>{p.dislikeCount}</td>
            </tr>
          ))}
        </tbody>
      </table>

      <h3 style={{ margin: '2rem 0 1rem' }}>{t('eventCounts')}</h3>
      <div style={{ display: 'flex', gap: '1rem', flexWrap: 'wrap' }}>
        {eventCounts.map(e => (
          <div key={e.eventType} className="stat-card" style={{ minWidth: '160px' }}>
            <div className="stat-label">{e.eventType}</div>
            <div className="stat-value" style={{ fontSize: '1.4rem' }}>{e.count}</div>
          </div>
        ))}
      </div>
    </>
  );
}
