import { Router, Request, Response } from 'express';
import { authMiddleware } from '../middleware/auth';
import { getProfile, upsertProfile } from '../models/user';

const router = Router();

const VALID_SPORTS = ['football', 'basketball', 'baseball', 'hockey', 'mma', 'golf', 'soccer'];
const VALID_BUCKETS = ['game_outcomes', 'point_totals', 'player_props'];
const VALID_MARKETS = ['fanduel', 'draftkings', 'offshore', 'other'];

// POST /api/profile/intake
router.post('/intake', authMiddleware, async (req: Request, res: Response) => {
  try {
    const userId = req.user!.userId;
    const { favoriteSports, interestBuckets, marketParticipant } = req.body;

    // Validate favoriteSports
    if (favoriteSports && Array.isArray(favoriteSports)) {
      const invalid = favoriteSports.filter((s: string) => !VALID_SPORTS.includes(s));
      if (invalid.length > 0) {
        res.status(400).json({ error: `Invalid sports: ${invalid.join(', ')}` });
        return;
      }
    }

    // Validate interestBuckets
    if (interestBuckets && Array.isArray(interestBuckets)) {
      const invalid = interestBuckets.filter((b: string) => !VALID_BUCKETS.includes(b));
      if (invalid.length > 0) {
        res.status(400).json({ error: `Invalid interest buckets: ${invalid.join(', ')}` });
        return;
      }
    }

    // Validate marketParticipant
    if (marketParticipant && !VALID_MARKETS.includes(marketParticipant)) {
      res.status(400).json({ error: `Invalid market participant: ${marketParticipant}` });
      return;
    }

    const profile = await upsertProfile(userId, {
      favoriteSports: favoriteSports || undefined,
      interestBuckets: interestBuckets || undefined,
      marketParticipant: marketParticipant || undefined,
    });

    res.json({
      ok: true,
      profile: {
        favorite_sports_ranked: profile.favorite_sports_ranked,
        interest_buckets: profile.interest_buckets,
        market_participant: profile.market_participant,
      },
    });
  } catch (err) {
    console.error('Profile intake error:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

// GET /api/profile
router.get('/', authMiddleware, async (req: Request, res: Response) => {
  try {
    const userId = req.user!.userId;
    const profile = await getProfile(userId);

    if (!profile) {
      res.json({ profile: null });
      return;
    }

    res.json({
      profile: {
        favorite_sports_ranked: profile.favorite_sports_ranked,
        interest_buckets: profile.interest_buckets,
        market_participant: profile.market_participant,
      },
    });
  } catch (err) {
    console.error('Profile get error:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

export default router;
