from django.core.management.base import BaseCommand
from school_admin.models import SchoolPermission

PERMISSIONS = [
    # category, codename, name
    # ── Students ──────────────────────────────────
    ('students', 'view_student',           'View Students'),
    ('students', 'add_student',            'Add Students'),
    ('students', 'change_student',         'Edit Students'),
    ('students', 'delete_student',         'Delete Students'),
    # ── Parents ───────────────────────────────────
    ('parents', 'view_parent',             'View Parents'),
    ('parents', 'add_parent',              'Add Parents'),
    ('parents', 'change_parent',           'Edit Parents'),
    ('parents', 'delete_parent',           'Delete Parents'),
    # ── Teachers ──────────────────────────────────
    ('teachers', 'view_teacher',           'View Teachers'),
    ('teachers', 'add_teacher',            'Add Teachers'),
    ('teachers', 'change_teacher',         'Edit Teachers'),
    ('teachers', 'delete_teacher',         'Delete Teachers'),
    # ── Enrollments ───────────────────────────────
    ('enrollments', 'view_enrollment',     'View Enrollments'),
    ('enrollments', 'add_enrollment',      'Add Enrollments'),
    ('enrollments', 'change_enrollment',   'Edit Enrollments'),
    ('enrollments', 'delete_enrollment',   'Delete Enrollments'),
    # ── Academics ─────────────────────────────────
    ('academics', 'view_academic_class',   'View Classes & Sections'),
    ('academics', 'add_academic_class',    'Add Classes & Sections'),
    ('academics', 'change_academic_class', 'Edit Classes & Sections'),
    ('academics', 'delete_academic_class', 'Delete Classes & Sections'),
    ('academics', 'view_subject',          'View Subjects'),
    ('academics', 'add_subject',           'Add Subjects'),
    ('academics', 'change_subject',        'Edit Subjects'),
    ('academics', 'delete_subject',        'Delete Subjects'),
    # ── Fee Management ────────────────────────────
    ('fee', 'view_fee_structure',          'View Fee Structure'),
    ('fee', 'add_fee_structure',           'Add Fee Structure'),
    ('fee', 'change_fee_structure',        'Update Fee Structure'),
    ('fee', 'delete_fee_structure',        'Delete Fee Structure'),
    ('fee', 'view_fee_payment',            'View Fee Payments'),
    ('fee', 'add_fee_payment',             'Record Fee Payments'),
    ('fee', 'change_fee_payment',          'Edit Fee Payments'),
    ('fee', 'delete_fee_payment',          'Delete Fee Payments'),
    ('fee', 'view_fee_discount',           'View Fee Discounts'),
    ('fee', 'add_fee_discount',            'Add Fee Discounts'),
    ('fee', 'change_fee_discount',         'Edit Fee Discounts'),
    # ── Announcements ─────────────────────────────
    ('announcements', 'view_announcement',   'View Announcements'),
    ('announcements', 'add_announcement',    'Add Announcements'),
    ('announcements', 'change_announcement', 'Edit Announcements'),
    ('announcements', 'delete_announcement', 'Delete Announcements'),
    # ── Attendance ────────────────────────────────
    ('attendance', 'view_attendance',        'View Attendance'),
    ('attendance', 'add_attendance',         'Mark Attendance'),
    ('attendance', 'change_attendance',      'Edit Attendance Records'),
    ('attendance', 'view_attendance_report', 'View Attendance Reports'),
    # ── Timetable ─────────────────────────────────
    ('timetable', 'view_timetable',          'View Timetable'),
    ('timetable', 'add_timetable',           'Create Timetable'),
    ('timetable', 'change_timetable',        'Edit Timetable'),
    ('timetable', 'delete_timetable',        'Delete Timetable'),
    # ── Tasks ─────────────────────────────────────
    ('tasks', 'view_task',                   'View Tasks'),
    ('tasks', 'add_task',                    'Create Tasks'),
    ('tasks', 'change_task',                 'Edit Tasks'),
    ('tasks', 'delete_task',                 'Delete Tasks'),
    # ── Exams ─────────────────────────────────────
    ('exams', 'view_exam',                   'View Exams'),
    ('exams', 'add_exam',                    'Create Exams'),
    ('exams', 'change_exam',                 'Edit Exams'),
    ('exams', 'delete_exam',                 'Delete Exams'),
    ('exams', 'view_exam_result',            'View Exam Results'),
    ('exams', 'add_exam_result',             'Add Exam Results'),
    ('exams', 'change_exam_result',          'Edit Exam Results'),
    # ── Transport ─────────────────────────────────
    ('transport', 'view_transport',          'View Transport'),
    ('transport', 'add_transport',           'Add Transport'),
    ('transport', 'change_transport',        'Edit Transport'),
    ('transport', 'delete_transport',        'Delete Transport'),
    # ── Payslips ──────────────────────────────────
    ('payslips', 'view_payslip',             'View Payslips'),
    ('payslips', 'add_payslip',              'Add Payslips'),
    ('payslips', 'change_payslip',           'Edit Payslips'),
    ('payslips', 'delete_payslip',           'Delete Payslips'),
    # ── Reports ───────────────────────────────────
    ('reports', 'view_reports',              'View Reports Dashboard'),
    ('reports', 'view_financial_report',     'View Financial Reports'),
    ('reports', 'view_academic_report',      'View Academic Reports'),
    ('reports', 'view_attendance_report_all','View All Attendance Reports'),
    ('reports', 'export_reports',            'Export Reports'),
]


class Command(BaseCommand):
    help = 'Seed initial school permissions into the school DB'

    def handle(self, *args, **options):
        created = 0
        for category, codename, name in PERMISSIONS:
            _, is_new = SchoolPermission.objects.get_or_create(
                codename=codename,
                defaults={'name': name, 'category': category},
            )
            if is_new:
                created += 1

        total = SchoolPermission.objects.count()
        self.stdout.write(
            self.style.SUCCESS(
                f'Seeded {created} new permissions. Total in DB: {total}'
            )
        )
