from django.core.management.base import BaseCommand
from courses.models import Course, Semester, Subject

SEMESTER_DATA = [
    {
        'name': 'Semester -I', 'number': 1, 'subjects': [
            {'code': '24BCM101T', 'name': 'Principles of Management', 'credits': 3},
            {'code': '24BCM102T', 'name': 'Financial Accounting', 'credits': 3},
            {'code': '24BCM103T', 'name': 'Business Mathematics & Statistics', 'credits': 4},
            {'code': '24BCM104T', 'name': 'Marketing Management', 'credits': 4},
            {'code': '24BCM105T', 'name': 'English Communication', 'credits': 3},
            {'code': '24BCM106P', 'name': 'Basics of Computer Applications Lab', 'credits': 1},
            {'code': '24BCM106T', 'name': 'Basics of Computer Applications', 'credits': 2},
            {'code': '24SYN101P', 'name': 'Yoga/Sports/NCC Lab', 'credits': 1},
        ]
    },
    {
        'name': 'Semester -II', 'number': 2, 'subjects': [
            {'code': '24BCM201T', 'name': 'Organization Behaviour', 'credits': 3},
            {'code': '24BCM202T', 'name': 'Business Environment', 'credits': 3},
            {'code': '24BCM203T', 'name': 'Business Economics', 'credits': 4},
            {'code': '24BCM204T', 'name': 'Human Resource Management', 'credits': 3},
            {'code': '24BCM205T', 'name': 'Legal & Ethical Issues In Business', 'credits': 3},
            {'code': '24BCM206T', 'name': 'Emerging Technologies & Applications', 'credits': 4},
            {'code': '24BCM207T', 'name': 'Business Communication', 'credits': 3},
        ]
    },
    {
        'name': 'Semester -III', 'number': 3, 'subjects': [
            {'code': '24BCM301T', 'name': 'Entrepreneurship & New Start ups', 'credits': 3},
            {'code': '24BCM302P', 'name': 'Cost Accounting Lab', 'credits': 1},
            {'code': '24BCM302T', 'name': 'Cost Accounting', 'credits': 3},
            {'code': '24BCM303T', 'name': "India's Diversity and Business", 'credits': 3},
            {'code': '24BCM304T', 'name': 'Supply Chain Management', 'credits': 3},
            {'code': '24BCM305T', 'name': 'Production & Operation Management', 'credits': 3},
            {'code': '24BCM306T', 'name': 'Project Management', 'credits': 3},
            {'code': '24BCM387P', 'name': 'Seminar Presentation', 'credits': 2},
        ]
    },
    {
        'name': 'Semester -IV', 'number': 4, 'subjects': [
            {'code': '24BCM401T', 'name': 'Management Information System', 'credits': 3},
            {'code': '24BCM402T', 'name': 'Financial Management', 'credits': 4},
            {'code': '24BCM403T', 'name': 'Business Research Methodology', 'credits': 4},
            {'code': '24BCM404T', 'name': 'International Business', 'credits': 3},
            {'code': '24BCM405T', 'name': 'Environmental Science and Sustainability', 'credits': 2},
            {'code': '24BCM406T', 'name': 'Public Health & Management', 'credits': 3},
            {'code': '24BCM407T', 'name': 'Design Thinking & Innovation', 'credits': 3},
        ]
    },
    {
        'name': 'Semester -V', 'number': 5, 'subjects': [
            {'code': '24BCM501T', 'name': 'Income Tax & Practice', 'credits': 3},
            {'code': '24BCM502T', 'name': 'Indian Financial System', 'credits': 4},
            {'code': '24BCM503T', 'name': 'Strategic Management', 'credits': 3},
            {'code': '24BCM504T', 'name': 'Indian Constitution', 'credits': 2},
            {'code': '24EBCXXX', 'name': 'Major Elective-I', 'credits': 4},
            {'code': '24EBCXXX', 'name': 'Major Elective-II', 'credits': 4},
            {'code': '24SIP001P', 'name': 'Summer Internship-I', 'credits': 4},
        ]
    },
    {
        'name': 'Semester -VI', 'number': 6, 'subjects': [
            {'code': '24AEC004T', 'name': 'Indian Knowledge System', 'credits': 3},
            {'code': '24BCM601T', 'name': 'Goods and Service Tax', 'credits': 4},
            {'code': '24BCM602T', 'name': 'Corporate Governance', 'credits': 3},
            {'code': '24BCM609P', 'name': 'Project', 'credits': 6},
            {'code': '24EBCXXX', 'name': 'Elective-III', 'credits': 4},
            {'code': '24EBCXXX', 'name': 'Elective-IV', 'credits': 4},
        ]
    },
]

class Command(BaseCommand):
    help = 'Upload BCOM semester and subject data.'

    def handle(self, *args, **options):
        course_slug = 'bcom'
        try:
            course = Course.objects.get(slug=course_slug)
        except Course.DoesNotExist:
            self.stdout.write(self.style.ERROR(f'Course with slug "{course_slug}" not found.'))
            return
        for sem_data in SEMESTER_DATA:
            semester, created = Semester.objects.get_or_create(
                course=course,
                name=sem_data['name'],
                number=sem_data['number']
            )
            if created:
                self.stdout.write(self.style.SUCCESS(f"Created {sem_data['name']}"))
            else:
                self.stdout.write(self.style.WARNING(f"{sem_data['name']} already exists."))
            for subj in sem_data['subjects']:
                subject, s_created = Subject.objects.get_or_create(
                    semester=semester,
                    code=subj['code'],
                    name=subj['name'],
                    defaults={
                        'credits': subj['credits'],
                        'description': ''
                    }
                )
                if s_created:
                    self.stdout.write(self.style.SUCCESS(f"Added subject {subj['name']} to {sem_data['name']}"))
                else:
                    self.stdout.write(self.style.WARNING(f"Subject {subj['name']} already exists in {sem_data['name']}"))
