import os
from django.core.management.base import BaseCommand
from django.utils.text import slugify

from colleges.models import College, ProgramsSection, Program
from courses.models import Course

class Command(BaseCommand):
    help = 'Updates Roorkee College of Smart Computing programs section with computing courses'

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Starting to update Smart Computing college programs'))
        
        try:
            # Get the Smart Computing college
            college = College.objects.get(slug='roorkee-college-of-smart-computing')
            self.stdout.write(f"Found college: {college.name}")
            
            # Get or create the programs section
            programs_section, created = ProgramsSection.objects.get_or_create(
                college=college,
                defaults={
                    'title': 'Academic Programs',
                    'description': 'Roorkee College of Smart Computing offers comprehensive programs in computer science, artificial intelligence, cybersecurity, and emerging technologies. Our curriculum is designed to meet industry demands and prepare students for successful careers in the rapidly evolving technology sector.',
                    'has_doctoral_programs': True
                }
            )
            
            if created:
                self.stdout.write(self.style.SUCCESS(f"Created programs section for {college.name}"))
            else:
                # Update the existing section
                programs_section.title = 'Academic Programs'
                programs_section.description = 'Roorkee College of Smart Computing offers comprehensive programs in computer science, artificial intelligence, cybersecurity, and emerging technologies. Our curriculum is designed to meet industry demands and prepare students for successful careers in the rapidly evolving technology sector.'
                programs_section.has_doctoral_programs = True
                programs_section.save()
                self.stdout.write(self.style.SUCCESS(f"Updated programs section for {college.name}"))
            
            # Clear existing programs first
            programs_section.programs.all().delete()
            self.stdout.write("Cleared existing programs")
            
            # Define the programs based on our courses with appropriate URLs
            programs_data = [
                # B.Tech Programs
                {'name': 'B.Tech. Hons. (CSE)', 'link': '/academics/programs/courses/btech-hons-cse/', 'type': 'UG', 'order': 1},
                {'name': 'B.Tech. Hons. (AI & ML)', 'link': '/academics/programs/courses/btech-hons-ai-ml/', 'type': 'UG', 'order': 2},
                {'name': 'B.Tech. Hons. (IoT, Cyber Security & Blockchain)', 'link': '/academics/programs/courses/btech-hons-iot-cyber-security-including-blockchain-technology-data-science/', 'type': 'UG', 'order': 3},
                {'name': 'B.Tech. Hons. LE (CSE)', 'link': '/academics/programs/courses/btech-hons-le-cse/', 'type': 'UG', 'order': 4},
                {'name': 'B.Tech. Hons. LE (AI & ML)', 'link': '/academics/programs/courses/btech-hons-le-ai-ml/', 'type': 'UG', 'order': 5},
                {'name': 'B.Tech. Hons. LE (IoT & Cyber Security)', 'link': '/academics/programs/courses/btech-hons-le-iot-cyber-security-including-blockchain-technology-data-science/', 'type': 'UG', 'order': 6},
                
                # Bachelor Programs
                {'name': 'BCA (Computer Applications)', 'link': '/academics/programs/courses/bca/', 'type': 'UG', 'order': 7},
                {'name': 'BCA (AI & ML / Cyber Security / Data Science)', 'link': '/academics/programs/courses/bca-ai-ml-cyber-security-data-science/', 'type': 'UG', 'order': 8},
                {'name': 'B.Sc. Computer Science', 'link': '/academics/programs/courses/bsc-computer-science/', 'type': 'UG', 'order': 9},
                {'name': 'B.Sc. Computer Science (Specializations)', 'link': '/academics/programs/courses/bsc-computer-science-ai-ml-cyber-security-data-science/', 'type': 'UG', 'order': 10},
                {'name': 'B.Sc. Animation & Multimedia', 'link': '/academics/programs/courses/bsc-animation-multimedia/', 'type': 'UG', 'order': 11},
                
                # Master Programs
                {'name': 'M.Tech. (CS/CSE)', 'link': '/academics/programs/courses/mtech-cs-cse/', 'type': 'PG', 'order': 1},
                {'name': 'M.Sc. Computer Science', 'link': '/academics/programs/courses/msc-computer-science/', 'type': 'PG', 'order': 2},
                {'name': 'MCA (Master of Computer Applications)', 'link': '/academics/programs/courses/mca/', 'type': 'PG', 'order': 3},
                
                # Diploma Programs
                {'name': 'Diploma (CSE)', 'link': '/academics/programs/courses/diploma-cse/', 'type': 'DP', 'order': 1},
            ]
            
            # Create programs
            created_count = 0
            for program_data in programs_data:
                program = Program.objects.create(
                    programs_section=programs_section,
                    name=program_data['name'],
                    link=program_data['link'],
                    program_type=program_data['type'],
                    order=program_data['order']
                )
                created_count += 1
                self.stdout.write(f"Created program: {program.name} ({program.get_program_type_display()})")
            
            self.stdout.write(
                self.style.SUCCESS(f'Successfully updated {college.name} with {created_count} programs!')
            )
            
            # Display summary
            self.stdout.write("\n" + "="*50)
            self.stdout.write(self.style.SUCCESS("PROGRAMS SUMMARY:"))
            self.stdout.write("="*50)
            
            ug_programs = programs_section.programs.filter(program_type='UG').count()
            pg_programs = programs_section.programs.filter(program_type='PG').count()
            dp_programs = programs_section.programs.filter(program_type='DP').count()
            
            self.stdout.write(f"Undergraduate Programs: {ug_programs}")
            self.stdout.write(f"Postgraduate Programs: {pg_programs}")
            self.stdout.write(f"Diploma Programs: {dp_programs}")
            self.stdout.write(f"Total Programs: {created_count}")
            
        except College.DoesNotExist:
            self.stdout.write(
                self.style.ERROR('Roorkee College of Smart Computing not found!')
            )
        except Exception as e:
            self.stdout.write(
                self.style.ERROR(f'Error occurred: {str(e)}')
            )
