import { Router, Response } from 'express';
import { authMiddleware, AuthRequest } from '../middleware/auth';
import { getUserBotToken } from '../models/user';
import { getDailyUsage, canMakeQuery, getUsageStats } from '../models/usage';
import { getBotUsername } from '../services/telegram';

const router = Router();

// Get user dashboard data
router.get('/dashboard', authMiddleware, async (req: AuthRequest, res: Response) => {
  try {
    const user = req.user;
    const botToken = await getUserBotToken(user.id);
    const usage = await canMakeQuery(user.id, user.plan);
    const stats = await getUsageStats(user.id, 7);
    
    const botUsername = getBotUsername();
    const botLink = `https://t.me/${botUsername}?start=${botToken}`;
    
    res.json({
      user: {
        id: user.id,
        email: user.email,
        plan: user.plan,
        telegram_username: user.telegram_username,
        telegram_connected: !!user.telegram_chat_id,
      },
      usage: {
        today: usage.limit === -1 ? 0 : usage.limit - usage.remaining,
        limit: usage.limit,
        remaining: usage.remaining,
        unlimited: usage.limit === -1,
      },
      bot: {
        link: botLink,
        username: `@${botUsername}`,
      },
      stats,
    });
  } catch (error) {
    console.error('Dashboard error:', error);
    res.status(500).json({ error: 'Failed to load dashboard' });
  }
});

// Get Telegram connect link
router.get('/telegram-link', authMiddleware, async (req: AuthRequest, res: Response) => {
  try {
    const botToken = await getUserBotToken(req.userId!);
    const botUsername = getBotUsername();
    
    res.json({
      link: `https://t.me/${botUsername}?start=${botToken}`,
      bot_username: `@${botUsername}`,
    });
  } catch (error) {
    console.error('Telegram link error:', error);
    res.status(500).json({ error: 'Failed to generate link' });
  }
});

// Get usage stats
router.get('/usage', authMiddleware, async (req: AuthRequest, res: Response) => {
  try {
    const usage = await canMakeQuery(req.userId!, req.user.plan);
    const stats = await getUsageStats(req.userId!, 30);
    
    res.json({
      today: {
        used: usage.limit === -1 ? await getDailyUsage(req.userId!) : usage.limit - usage.remaining,
        limit: usage.limit,
        remaining: usage.remaining,
      },
      history: stats,
    });
  } catch (error) {
    console.error('Usage error:', error);
    res.status(500).json({ error: 'Failed to get usage' });
  }
});

export default router;
