"""Script to seed initial academic programmes."""

import sys
from pathlib import Path

# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))

from sqlalchemy.orm import Session

from app.database import SessionLocal
from app.models.academic import Programme


def seed_programmes():
    """Seed the programmes table with initial data."""
    db: Session = SessionLocal()
    try:
        programmes_data = [
            {
                "code": "ACC",
                "name": "BSc Accounting and Finance",
                "department": "Department of Commercial Studies",
                "faculty": "Faculty of Management Sciences",
                "duration_years": 4,
                "is_active": True,
            },
            {
                "code": "CSC",
                "name": "BSc Computer Science / Software Engineering / Artificial Intelligence",
                "department": "Department of Sciences",
                "faculty": "Faculty of Applied Sciences",
                "duration_years": 4,
                "is_active": True,
            },
            {
                "code": "DIG",
                "name": "BSc Digital Media / Content Production / Creative Entrepreneurship",
                "department": "Department of Arts",
                "faculty": "Faculty of Arts",
                "duration_years": 4,
                "is_active": True,
            },
        ]
        
        created_count = 0
        skipped_count = 0
        
        for prog_data in programmes_data:
            # Check if programme already exists
            existing = db.query(Programme).filter(Programme.code == prog_data["code"]).first()
            
            if existing:
                print(f"Programme with code '{prog_data['code']}' already exists. Skipping...")
                skipped_count += 1
                continue
            
            # Create new programme
            programme = Programme(**prog_data)
            db.add(programme)
            created_count += 1
            print(f"Created programme: {prog_data['code']} - {prog_data['name']}")
        
        db.commit()
        
        print(f"\nSeeding completed!")
        print(f"   Created: {created_count} programmes")
        print(f"   Skipped: {skipped_count} programmes (already exist)")
        
        return created_count
    except Exception as e:
        db.rollback()
        print(f"Error seeding programmes: {e}")
        raise
    finally:
        db.close()


if __name__ == "__main__":
    seed_programmes()
