import { sql } from '@vercel/postgres';
import { getUserFromRequest } from '../../../lib/permission-middleware';

export default async function handler(req, res) {
  if (req.method !== 'GET') {
    return res.status(405).json({ error: 'Method not allowed' });
  }

  try {
    // Get authenticated user
    const user = await getUserFromRequest(req);
    if (!user) {
      return res.status(401).json({ error: 'Authentication required' });
    }

    // Get total cards owned by user
    const cardsResult = await sql`
      SELECT COALESCE(SUM(quantity), 0) as total_cards
      FROM user_cards 
      WHERE user_id = ${user.userId}
    `;

    // Get total collections owned by user
    const collectionsResult = await sql`
      SELECT COUNT(*) as total_collections
      FROM collections 
      WHERE user_id = ${user.userId}
    `;

    // Get total decks owned by user
    const decksResult = await sql`
      SELECT COUNT(*) as total_decks
      FROM decks 
      WHERE user_id = ${user.userId}
    `;

    // Get total value of user's cards
    const valueResult = await sql`
      SELECT COALESCE(SUM(cards.market_price * user_cards.quantity), 0) as total_value
      FROM user_cards
      JOIN cards ON user_cards.card_id = cards.id
      WHERE user_cards.user_id = ${user.userId}
        AND cards.market_price IS NOT NULL
    `;

    // Get game breakdown
    const gameBreakdownResult = await sql`
      SELECT 
        cards.game,
        COUNT(DISTINCT cards.id) as unique_cards,
        COALESCE(SUM(user_cards.quantity), 0) as total_quantity,
        COALESCE(SUM(cards.market_price * user_cards.quantity), 0) as total_value
      FROM user_cards
      JOIN cards ON user_cards.card_id = cards.id
      WHERE user_cards.user_id = ${user.userId}
      GROUP BY cards.game
      ORDER BY total_value DESC
    `;

    // Get rarity breakdown
    const rarityBreakdownResult = await sql`
      SELECT 
        cards.rarity,
        COUNT(DISTINCT cards.id) as unique_cards,
        COALESCE(SUM(user_cards.quantity), 0) as total_quantity,
        COALESCE(SUM(cards.market_price * user_cards.quantity), 0) as total_value
      FROM user_cards
      JOIN cards ON user_cards.card_id = cards.id
      WHERE user_cards.user_id = ${user.userId}
      GROUP BY cards.rarity
      ORDER BY total_value DESC
    `;

    // Get recent activity (last 10 cards added)
    const recentActivityResult = await sql`
      SELECT 
        cards.name,
        cards.game,
        cards.rarity,
        cards.image_url,
        cards.market_price,
        user_cards.quantity,
        user_cards.created_at
      FROM user_cards
      JOIN cards ON user_cards.card_id = cards.id
      WHERE user_cards.user_id = ${user.userId}
      ORDER BY user_cards.created_at DESC
      LIMIT 10
    `;

    const stats = {
      totalCards: parseInt(cardsResult.rows[0].total_cards) || 0,
      totalCollections: parseInt(collectionsResult.rows[0].total_collections) || 0,
      totalDecks: parseInt(decksResult.rows[0].total_decks) || 0,
      totalValue: parseFloat(valueResult.rows[0].total_value) || 0,
      gameBreakdown: gameBreakdownResult.rows.map(row => ({
        game: row.game,
        uniqueCards: parseInt(row.unique_cards),
        totalQuantity: parseInt(row.total_quantity),
        totalValue: parseFloat(row.total_value)
      })),
      rarityBreakdown: rarityBreakdownResult.rows.map(row => ({
        rarity: row.rarity,
        uniqueCards: parseInt(row.unique_cards),
        totalQuantity: parseInt(row.total_quantity),
        totalValue: parseFloat(row.total_value)
      })),
      recentActivity: recentActivityResult.rows.map(row => ({
        name: row.name,
        game: row.game,
        rarity: row.rarity,
        imageUrl: row.image_url,
        marketPrice: parseFloat(row.market_price) || 0,
        quantity: parseInt(row.quantity),
        addedAt: row.created_at
      }))
    };

    res.status(200).json(stats);

  } catch (error) {
    console.error('Stats API error:', error);
    res.status(500).json({ error: 'Internal server error' });
  }
} 