"""Populate the database with demo applications so the dashboard is testable.

Usage:  python seed.py            (adds ~60 demo rows)
        python seed.py --reset    (clears existing rows first)

Safe to delete this file in production.
"""
import sys
import random
from datetime import datetime, timezone, timedelta

from app import app
from extensions import db
from models import (Application, GENDERS, EDUCATION_LEVELS, EMPLOYMENT_STATUSES,
                    LANGUAGES, LEARNING_DURATIONS, TRACKS, CHALLENGES, REASONS, HEARD_FROM)

# deterministic so repeated runs look consistent
random.seed(42)

FIRST = ['Amina', 'Jean', 'Grace', 'Paul', 'Sarah', 'Emmanuel', 'Divine', 'Brian', 'Laure',
         'Kevin', 'Nadia', 'Samuel', 'Rita', 'Franck', 'Blessing', 'Marc', 'Chantal', 'Yannick',
         'Ines', 'Cedric', 'Aisha', 'Boris', 'Larissa', 'Steve', 'Mercy', 'Arnold']
LAST = ['Nkeng', 'Fotso', 'Mballa', 'Tabi', 'Ngu', 'Bello', 'Etoa', 'Kamdem', 'Achu', 'Manga',
        'Ndip', 'Fon', 'Awono', 'Talla', 'Ekwe', 'Nana', 'Bihina', 'Che', 'Ako', 'Ndam']
COUNTRIES = ['Cameroon', 'Cameroon', 'Cameroon', 'Cameroon', 'Nigeria', 'Nigeria', 'Ghana',
             'Ivory Coast', 'Senegal', 'Kenya']
CITIES = ['Nkongsamba', 'Douala', 'Yaoundé', 'Bafoussam', 'Buea', 'Lagos', 'Accra', 'Bamenda', 'Limbe']


def make_row(i):
    now = datetime.now(timezone.utc)
    complete = random.random() > 0.15
    langs = random.sample(LANGUAGES, k=random.randint(0, 4))
    challenges = random.sample(CHALLENGES, k=random.randint(1, 3))
    has_exp = random.random() > 0.4
    row = Application(
        full_name=random.choice(FIRST) + ' ' + random.choice(LAST),
        email='user%d@example.com' % i,
        phone='+2376%08d' % random.randint(0, 99999999),
        gender=random.choice(GENDERS),
        age=random.randint(16, 40),
        country=random.choice(COUNTRIES),
        city=random.choice(CITIES),
        education=random.choice(EDUCATION_LEVELS),
        employment_status=random.choice(EMPLOYMENT_STATUSES),
        has_programming_experience=has_exp,
        programming_languages=', '.join(langs),
        learning_duration=random.choice(LEARNING_DURATIONS),
        has_projects=has_exp and random.random() > 0.4,
        internship_experience=random.random() > 0.7,
        team_project_experience=random.random() > 0.6,
        challenges=', '.join(challenges),
        reason_for_joining=random.choice(REASONS),
        weekly_hours=random.choice([3, 5, 8, 10, 12, 15, 20, 25, 35]),
        commitment_score=random.randint(4, 10),
        motivation='I want to become a professional developer and build real products.',
        track=random.choice(TRACKS),
        heard_from=random.choice(HEARD_FROM),
        portfolio='',
        created_at=now - timedelta(days=random.randint(0, 13), hours=random.randint(0, 23)),
    )
    row.status = 'complete' if complete and row.is_complete else 'incomplete'
    return row


def main():
    with app.app_context():
        db.create_all()
        if '--reset' in sys.argv:
            Application.query.delete()
            db.session.commit()
            print('Cleared existing applications.')
        for i in range(60):
            db.session.add(make_row(i))
        db.session.commit()
        print('Seeded. Total applications now:', Application.query.count())


if __name__ == '__main__':
    main()
