"""
Seed script untuk Iqra Path
Membuat akun superadmin dan data contoh.

Usage:
    python seed.py
"""
from app import create_app
from app.extensions import db
from app.models.user import User
from app.models.school import School
from app.models.kelas import Kelas, KelasMurid
from app.models.mata_pelajaran import MataPelajaran
from app.models.jadwal import Jadwal
from datetime import time

app = create_app()

with app.app_context():
    # Create all tables
    db.create_all()
    print("Database tables created successfully.")

    # Check if superadmin exists
    superadmin = User.query.filter_by(role='superadmin').first()
    if not superadmin:
        superadmin = User(
            name='Super Admin',
            email='superadmin@iqrapath.com',
            role='superadmin',
            school_id=None
        )
        superadmin.set_password('admin123')
        db.session.add(superadmin)
        db.session.commit()
        print("Superadmin created:")
        print("  Email: superadmin@iqrapath.com")
        print("  Password: admin123")
    else:
        print("Superadmin already exists.")

    # Create sample school (approved)
    sample_school = School.query.filter_by(npsn='20100001').first()
    if not sample_school:
        sample_school = School(
            name='MTs Nurul Hidayah',
            npsn='20100001',
            address='Jl. Masjid Agung No. 10, Jakarta Selatan',
            phone='021-7654321',
            email='info@nurulhidayah.sch.id',
            status='approved'
        )
        db.session.add(sample_school)
        db.session.flush()

        # Create admin for this school
        admin = User(
            school_id=sample_school.id,
            name='Ahmad Fauzi',
            email='admin@nurulhidayah.sch.id',
            role='admin'
        )
        admin.set_password('admin123')
        db.session.add(admin)

        # Create guru
        guru1 = User(school_id=sample_school.id, name='Ustadz Hasan', email='hasan@nurulhidayah.sch.id', role='guru')
        guru1.set_password('guru123')
        guru2 = User(school_id=sample_school.id, name='Ustadzah Fatimah', email='fatimah@nurulhidayah.sch.id', role='guru')
        guru2.set_password('guru123')
        db.session.add_all([guru1, guru2])
        db.session.flush()

        # Create kelas
        kelas7a = Kelas(school_id=sample_school.id, name='7A', academic_year='2025/2026')
        kelas7b = Kelas(school_id=sample_school.id, name='7B', academic_year='2025/2026')
        kelas8a = Kelas(school_id=sample_school.id, name='8A', academic_year='2025/2026')
        db.session.add_all([kelas7a, kelas7b, kelas8a])
        db.session.flush()

        # Create mata pelajaran
        mapel1 = MataPelajaran(school_id=sample_school.id, name='Al-Quran Hadits', description='Pembelajaran Al-Quran dan Hadits')
        mapel2 = MataPelajaran(school_id=sample_school.id, name='Matematika', description='Matematika dasar dan lanjutan')
        mapel3 = MataPelajaran(school_id=sample_school.id, name='Bahasa Arab', description='Pembelajaran Bahasa Arab')
        db.session.add_all([mapel1, mapel2, mapel3])
        db.session.flush()

        # Create murid
        murid_data = [
            ('Abdullah Rahman', 'abdullah@nurulhidayah.sch.id'),
            ('Aisyah Putri', 'aisyah@nurulhidayah.sch.id'),
            ('Muhammad Rizki', 'rizki@nurulhidayah.sch.id'),
            ('Khadijah Sari', 'khadijah@nurulhidayah.sch.id'),
            ('Umar Fadhil', 'umar@nurulhidayah.sch.id'),
        ]
        murid_users = []
        for name, email in murid_data:
            m = User(school_id=sample_school.id, name=name, email=email, role='murid')
            m.set_password('murid123')
            db.session.add(m)
            murid_users.append(m)
        db.session.flush()

        # Enroll murid to kelas
        for i, m in enumerate(murid_users):
            kelas = kelas7a if i < 3 else kelas7b
            enrollment = KelasMurid(school_id=sample_school.id, kelas_id=kelas.id, murid_id=m.id)
            db.session.add(enrollment)

        # Create jadwal
        jadwal_data = [
            (kelas7a.id, mapel1.id, guru1.id, 'senin', '07:00', '08:30'),
            (kelas7a.id, mapel2.id, guru2.id, 'senin', '08:30', '10:00'),
            (kelas7b.id, mapel3.id, guru1.id, 'selasa', '07:00', '08:30'),
            (kelas7a.id, mapel3.id, guru1.id, 'rabu', '07:00', '08:30'),
            (kelas7b.id, mapel1.id, guru2.id, 'kamis', '07:00', '08:30'),
        ]
        for kelas_id, mapel_id, guru_id, day, start, end in jadwal_data:
            j = Jadwal(
                school_id=sample_school.id,
                kelas_id=kelas_id,
                mata_pelajaran_id=mapel_id,
                guru_id=guru_id,
                day=day,
                start_time=time.fromisoformat(start),
                end_time=time.fromisoformat(end)
            )
            db.session.add(j)

        db.session.commit()
        print("\nSample school 'MTs Nurul Hidayah' created with:")
        print("  Admin: admin@nurulhidayah.sch.id / admin123")
        print("  Guru:  hasan@nurulhidayah.sch.id / guru123")
        print("         fatimah@nurulhidayah.sch.id / guru123")
        print("  Murid: abdullah@nurulhidayah.sch.id / murid123")
        print("         aisyah@nurulhidayah.sch.id / murid123")
        print("         (dan 3 murid lainnya)")
        print("  3 Kelas, 3 Mata Pelajaran, 5 Jadwal")
    else:
        print("Sample school already exists.")

    # Create a second pending school for testing
    pending_school = School.query.filter_by(npsn='20100002').first()
    if not pending_school:
        pending_school = School(
            name='SD Islam Ar-Rahman',
            npsn='20100002',
            address='Jl. Merdeka No. 5, Bandung',
            phone='022-1234567',
            email='info@arrahman.sch.id',
            status='pending'
        )
        db.session.add(pending_school)
        db.session.flush()

        pending_admin = User(
            school_id=pending_school.id,
            name='Siti Aminah',
            email='admin@arrahman.sch.id',
            role='admin'
        )
        pending_admin.set_password('admin123')
        db.session.add(pending_admin)
        db.session.commit()
        print("\nPending school 'SD Islam Ar-Rahman' created:")
        print("  Admin: admin@arrahman.sch.id / admin123")
        print("  Status: PENDING (menunggu approval)")
    else:
        print("Pending school already exists.")

    print("\n=== Seeding complete! ===")
    print("Run the app with: python run.py")
    print("Open: http://localhost:5000")
