#!/usr/bin/env python3
"""
Database Initialization Script for Abbas FIT

Run this script to:
1. Create indexes for better performance
2. Create default admin user
3. Add sample testimonials

Usage:
    python init_db.py
"""

import asyncio
import os
from motor.motor_asyncio import AsyncIOMotorClient
from passlib.context import CryptContext
from datetime import datetime
import uuid
from dotenv import load_dotenv
from pathlib import Path

# Load environment
load_dotenv(Path(__file__).parent / '.env')

# Configuration
MONGO_URL = os.environ.get('MONGO_URL', 'mongodb://localhost:27017')
DB_NAME = os.environ.get('DB_NAME', 'abbasfit_db')
ADMIN_EMAIL = os.environ.get('ADMIN_EMAIL', 'admin@abbasfit.com')
ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'admin')

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

async def init_database():
    print(f"Connecting to MongoDB: {MONGO_URL}")
    client = AsyncIOMotorClient(MONGO_URL)
    db = client[DB_NAME]
    
    print(f"Using database: {DB_NAME}")
    
    # Create indexes
    print("\nCreating indexes...")
    
    # Users collection
    await db.users.create_index("email", unique=True)
    await db.users.create_index("id", unique=True)
    print("  ✓ Users indexes created")
    
    # Vitals collection
    await db.vitals.create_index("user_id")
    await db.vitals.create_index("created_at")
    await db.vitals.create_index([("user_id", 1), ("created_at", -1)])
    print("  ✓ Vitals indexes created")
    
    # Meals collection
    await db.meals.create_index("user_id")
    await db.meals.create_index("created_at")
    await db.meals.create_index([("user_id", 1), ("created_at", -1)])
    print("  ✓ Meals indexes created")
    
    # Activities collection
    await db.activities.create_index("user_id")
    await db.activities.create_index("created_at")
    print("  ✓ Activities indexes created")
    
    # Sessions collection
    await db.sessions.create_index("user_id")
    await db.sessions.create_index("date")
    await db.sessions.create_index([("date", 1), ("time_slot", 1)])
    print("  ✓ Sessions indexes created")
    
    # Contacts collection
    await db.contacts.create_index("created_at")
    await db.contacts.create_index("read")
    print("  ✓ Contacts indexes created")
    
    # Create default admin user
    print("\nChecking admin user...")
    admin = await db.users.find_one({"email": ADMIN_EMAIL})
    
    if not admin:
        admin_user = {
            "id": str(uuid.uuid4()),
            "email": ADMIN_EMAIL,
            "name": "Abbas",
            "password_hash": pwd_context.hash(ADMIN_PASSWORD),
            "role": "admin",
            "height_cm": 175,
            "weight_kg": 80,
            "age": 35,
            "gender": "male",
            "calorie_target": 2500,
            "protein_target": 180,
            "fiber_target": 35,
            "fat_target": 80,
            "profile_photo": None,
            "created_at": datetime.utcnow()
        }
        await db.users.insert_one(admin_user)
        print(f"  ✓ Admin user created: {ADMIN_EMAIL} / {ADMIN_PASSWORD}")
    else:
        print(f"  ℹ Admin user already exists: {ADMIN_EMAIL}")
    
    # Add sample testimonials
    print("\nChecking testimonials...")
    testimonials_count = await db.testimonials.count_documents({})
    
    if testimonials_count == 0:
        sample_testimonials = [
            {
                "id": str(uuid.uuid4()),
                "name": "Rahul Sharma",
                "content": "Abbas transformed my fitness journey! Lost 15kg in 4 months with his personalized diet and workout plans. Best trainer in the city!",
                "rating": 5,
                "active": True,
                "created_at": datetime.utcnow()
            },
            {
                "id": str(uuid.uuid4()),
                "name": "Priya Patel",
                "content": "As a working professional, I thought I'd never have time for fitness. Abbas designed a program that fits my schedule perfectly. Down 2 dress sizes!",
                "rating": 5,
                "active": True,
                "created_at": datetime.utcnow()
            },
            {
                "id": str(uuid.uuid4()),
                "name": "Amit Kumar",
                "content": "The AI meal tracking is amazing! It recognizes Indian foods perfectly. Abbas FIT helped me gain 8kg of lean muscle in 6 months.",
                "rating": 5,
                "active": True,
                "created_at": datetime.utcnow()
            }
        ]
        await db.testimonials.insert_many(sample_testimonials)
        print(f"  ✓ {len(sample_testimonials)} sample testimonials added")
    else:
        print(f"  ℹ Testimonials already exist: {testimonials_count}")
    
    print("\n" + "="*50)
    print("Database initialization complete!")
    print("="*50)
    print(f"\nAdmin Login:")
    print(f"  Email: {ADMIN_EMAIL}")
    print(f"  Password: {ADMIN_PASSWORD}")
    print(f"\n⚠️  Remember to change the admin password in production!")
    
    client.close()

if __name__ == "__main__":
    asyncio.run(init_database())
