#!/usr/bin/env python3

"""
Database seeding script for gym membership portal
Seeds the database with realistic data for testing and development
"""

import sys
import os
import sqlite3
import json
from datetime import datetime, timedelta
import random

# Add parent directory to path so we can import our modules
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from database import DatabaseManager
from config import DB_FILE, BASIC, PREMIUM, VIP

def seed_database():
    """Seed the database with realistic test data"""
    
    print("Seeding database with test data...")
    
    # Initialize database manager
    db = DatabaseManager()
    
    # Clear existing data
    db.cursor.execute("DELETE FROM bookings")
    db.cursor.execute("DELETE FROM classes")
    db.cursor.execute("DELETE FROM trainers")
    db.cursor.execute("DELETE FROM members")
    db.conn.commit()
    
    # Seed members (users)
    members_data = [
        ("John Smith", "john.smith@email.com", "555-0101", BASIC),
        ("Sarah Johnson", "sarah.j@email.com", "555-0102", PREMIUM),
        ("Mike Wilson", "mike.wilson@email.com", "555-0103", BASIC),
        ("Emily Davis", "emily.davis@email.com", "555-0104", VIP),
        ("Chris Brown", "chris.brown@email.com", "555-0105", PREMIUM),
        ("Lisa Anderson", "lisa.a@email.com", "555-0106", BASIC),
        ("David Martinez", "david.m@email.com", "555-0107", PREMIUM),
        ("Jennifer Taylor", "jen.taylor@email.com", "555-0108", VIP),
        ("Robert Garcia", "rob.garcia@email.com", "555-0109", BASIC),
        ("Amanda White", "amanda.w@email.com", "555-0110", PREMIUM)
    ]
    
    print("Adding members...")
    for name, email, phone, membership_type in members_data:
        success = db.add_member(name, email, phone, membership_type)
        if success:
            print(f"  Added member: {name}")
        else:
            print(f"  Failed to add member: {name}")
    
    # Seed trainers
    trainers_data = [
        ("Alex Thompson", "alex.trainer@gym.com", "555-0201", ["yoga", "pilates"], 45.0),
        ("Maria Rodriguez", "maria.trainer@gym.com", "555-0202", ["cardio", "strength"], 50.0),
        ("James Wilson", "james.trainer@gym.com", "555-0203", ["zumba", "spinning"], 40.0),
        ("Rachel Green", "rachel.trainer@gym.com", "555-0204", ["yoga", "strength"], 55.0),
        ("Tom Johnson", "tom.trainer@gym.com", "555-0205", ["cardio", "pilates"], 48.0)
    ]
    
    print("Adding trainers...")
    trainer_ids = []
    for name, email, phone, specialties, rate in trainers_data:
        success = db.add_trainer(name, email, phone, specialties, rate)
        if success:
            print(f"  Added trainer: {name}")
            # Get the trainer ID
            db.cursor.execute("SELECT id FROM trainers WHERE email = ?", (email,))
            trainer_id = db.cursor.fetchone()[0]
            trainer_ids.append(trainer_id)
        else:
            print(f"  Failed to add trainer: {name}")
    
    # Seed classes
    class_types = ["yoga", "pilates", "cardio", "strength", "zumba", "spinning"]
    print("Adding classes...")
    
    # Generate classes for the next 7 days
    base_date = datetime.now()
    class_ids = []
    
    for day_offset in range(7):
        class_date = (base_date + timedelta(days=day_offset)).strftime("%Y-%m-%d")
        
        # Add 3-5 classes per day
        num_classes = random.randint(3, 5)
        for i in range(num_classes):
            class_type = random.choice(class_types)
            trainer_id = random.choice(trainer_ids)
            
            # Generate random times between 6 AM and 8 PM
            hour = random.randint(6, 20)
            minute = random.choice([0, 30])
            time = f"{hour:02d}:{minute:02d}"
            
            duration = random.choice([45, 60, 90])
            max_capacity = random.randint(10, 25)
            price = random.uniform(10.0, 25.0)
            
            class_name = f"{class_type.title()} Class"
            
            class_id = db.create_class(
                name=class_name,
                trainer_id=trainer_id,
                date=class_date,
                time=time,
                duration=duration,
                max_capacity=max_capacity,
                class_type=class_type,
                price=round(price, 2)
            )
            
            if class_id:
                class_ids.append(class_id)
                print(f"  Added class: {class_name} on {class_date} at {time}")
    
    # Seed some bookings
    print("Adding bookings...")
    db.cursor.execute("SELECT id FROM members")
    member_ids = [row[0] for row in db.cursor.fetchall()]
    
    # Create some random bookings
    num_bookings = min(20, len(member_ids) * 2)
    for _ in range(num_bookings):
        member_id = random.choice(member_ids)
        class_id = random.choice(class_ids)
        
        success, message = db.book_class(member_id, class_id)
        if success:
            print(f"  Created booking for member {member_id} in class {class_id}")
    
    # Display summary
    stats = db.get_stats()
    print("\nDatabase seeding complete!")
    print(f"Summary:")
    print(f"  Members: {stats['total_members']}")
    print(f"  Trainers: {stats['total_trainers']}")
    print(f"  Classes: {stats['total_classes']}")
    print(f"  Confirmed bookings: {stats['confirmed_bookings']}")
    
    db.close()

if __name__ == "__main__":
    try:
        seed_database()
    except Exception as e:
        print(f"Error seeding database: {e}")
        sys.exit(1)