import os
import django
from django.utils import timezone
from decimal import Decimal
import pytz

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'edutrack_project.settings')
django.setup()

from school_management.models import Course, Student, Payment

def populate_data():
    # Confirmação para evitar apagar dados por acidente
    if input("Delete all existing data? (y/n): ").lower() != 'y':
        print("Operation cancelled.")
        return

    # Apaga dados antigos
    Payment.objects.all().delete()
    Student.objects.all().delete()
    Course.objects.all().delete()

    # === NOVOS PREÇOS OFICIAIS ===
    courses = [
        {'name': 'Primeira Classe', 'grade': 1, 'tuition_amount': Decimal('2500.00'), 'extracurricular_amount': Decimal('1200.00')},
        {'name': 'Segunda Classe', 'grade': 2, 'tuition_amount': Decimal('2500.00'), 'extracurricular_amount': Decimal('1200.00')},
        {'name': 'Terceira Classe', 'grade': 3, 'tuition_amount': Decimal('2500.00'), 'extracurricular_amount': Decimal('1200.00')},
        {'name': 'Quarta Classe', 'grade': 4, 'tuition_amount': Decimal('2675.00'), 'extracurricular_amount': Decimal('1200.00')},
        {'name': 'Quinta Classe', 'grade': 5, 'tuition_amount': Decimal('2775.00'), 'extracurricular_amount': Decimal('1200.00')},
        {'name': 'Sexta Classe', 'grade': 6, 'tuition_amount': Decimal('2875.00'), 'extracurricular_amount': Decimal('1200.00')},
    ]
    Course.objects.bulk_create([Course(**course_data) for course_data in courses])
    print("Cursos criados com os novos preços.")

    # === Alunos de exemplo (mantidos os mesmos) ===
    students = [
        {'full_name': 'Alice Johnson', 'father_name': 'Bob Johnson', 'mother_name': 'Carol Johnson', 'address': '123 Main St', 'contact': '123456789', 'course': Course.objects.get(grade=1), 'regime': 'normal', 'registration_month': '2025-01', 'discount_percentage': Decimal('0.00')},
        {'full_name': 'Manusse Jonathon', 'father_name': 'David Jonathon', 'mother_name': 'Eve Jonathon', 'address': '456 Oak St', 'contact': '987654321', 'course': Course.objects.get(grade=2), 'regime': 'normal', 'registration_month': '2025-01', 'discount_percentage': Decimal('10.00')},
        {'full_name': 'Allan Barros', 'father_name': 'Father Barros', 'mother_name': 'Mother Barros', 'address': '789 Pine St', 'contact': '111222333', 'course': Course.objects.get(grade=3), 'regime': 'normal', 'registration_month': '2025-02', 'discount_percentage': Decimal('0.00')},
        {'full_name': 'Maria Silva', 'father_name': 'José Silva', 'mother_name': 'Ana Silva', 'address': '101 Maple St', 'contact': '444555666', 'course': Course.objects.get(grade=4), 'regime': 'normal', 'registration_month': '2025-03', 'discount_percentage': Decimal('5.00')},
        {'full_name': 'Pedro Santos', 'father_name': 'Carlos Santos', 'mother_name': 'Luísa Santos', 'address': '202 Birch St', 'contact': '777888999', 'course': Course.objects.get(grade=5), 'regime': 'simples', 'registration_month': '2025-04', 'discount_percentage': Decimal('0.00')},
        {'full_name': 'Joana Mendes', 'father_name': 'António Mendes', 'mother_name': 'Rosa Mendes', 'address': '303 Cedar St', 'contact': '123123123', 'course': Course.objects.get(grade=6), 'regime': 'simples', 'registration_month': '2025-05', 'discount_percentage': Decimal('15.00')},
    ]
    Student.objects.bulk_create([Student(**student_data) for student_data in students])
    print("Alunos criados.")

    # === Pagamentos de exemplo atualizados com novos valores ===
    maputo_tz = pytz.timezone('Africa/Maputo')
    payments = [
        {
            'student': Student.objects.get(full_name='Alice Johnson'),
            'amount': Decimal('2500.00'),  # Nova mensalidade da 1ª classe
            'payment_type': 'mensalidade',
            'payment_method': 'numerario',
            'payment_date': timezone.make_aware(timezone.datetime(2025, 2, 1), maputo_tz),
        },
        {
            'student': Student.objects.get(full_name='Alice Johnson'),
            'amount': Decimal('1200.00'),  # Novo extracurricular
            'payment_type': 'extracurricular',
            'payment_method': 'mpesa',
            'payment_date': timezone.make_aware(timezone.datetime(2025, 2, 1), maputo_tz),
        },
        {
            'student': Student.objects.get(full_name='Manusse Jonathon'),
            'amount': Decimal('2250.00'),  # 2500 com 10% desconto = 2250
            'payment_type': 'mensalidade',
            'payment_method': 'emola',
            'payment_date': timezone.make_aware(timezone.datetime(2025, 2, 15), maputo_tz),
        },
    ]
    Payment.objects.bulk_create([Payment(**payment_data) for payment_data in payments])
    print("Pagamentos de exemplo criados com os novos preços.")

    print("\nData populated successfully com os novos preços oficiais!")
    print("Mensalidade 1ª-3ª: 2500.00 MT | 4ª: 2675.00 MT | 5ª: 2775.00 MT | 6ª: 2875.00 MT")
    print("Extracurricular (todos): 1200.00 MT")

if __name__ == '__main__':
    populate_data()