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 Engineering programs section with engineering courses'

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Starting to update Engineering college programs'))
        
        try:
            # Get the Engineering college
            college = College.objects.get(slug='roorkee-college-of-engineering')
            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': 'Engineering Programs',
                    'description': 'Roorkee College of Engineering offers comprehensive programs across core engineering disciplines including Civil, Electronics & Communication, Electrical & Electronics, and Mechanical Engineering. Our curriculum combines theoretical knowledge with practical skills, preparing students for successful careers in engineering and technology sectors.',
                    '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 = 'Engineering Programs'
                programs_section.description = 'Roorkee College of Engineering offers comprehensive programs across core engineering disciplines including Civil, Electronics & Communication, Electrical & Electronics, and Mechanical Engineering. Our curriculum combines theoretical knowledge with practical skills, preparing students for successful careers in engineering and technology sectors.'
                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 engineering courses
            programs_data = [
                # B.Tech Honours Programs
                {'name': 'B.Tech. Hons. (Civil Engineering)', 'link': '/academics/programs/courses/btech-hons-civil-engineering/', 'type': 'UG', 'order': 1},
                {'name': 'B.Tech. Hons. (Electronics & Communication)', 'link': '/academics/programs/courses/btech-hons-electronics-communication-engineering/', 'type': 'UG', 'order': 2},
                {'name': 'B.Tech. Hons. (Electrical & Electronics)', 'link': '/academics/programs/courses/btech-hons-electrical-electronics-engineering/', 'type': 'UG', 'order': 3},
                {'name': 'B.Tech. Hons. (Mechanical Engineering)', 'link': '/academics/programs/courses/btech-hons-mechanical-engineering/', 'type': 'UG', 'order': 4},
                
                # B.Tech Lateral Entry Programs
                {'name': 'B.Tech. Hons. LE (Civil Engineering)', 'link': '/academics/programs/courses/btech-hons-le-civil-engineering/', 'type': 'UG', 'order': 5},
                {'name': 'B.Tech. Hons. LE (Electronics & Communication)', 'link': '/academics/programs/courses/btech-hons-le-electronics-communication-engineering/', 'type': 'UG', 'order': 6},
                {'name': 'B.Tech. Hons. LE (Electrical & Electronics)', 'link': '/academics/programs/courses/btech-hons-le-electrical-electronics-engineering/', 'type': 'UG', 'order': 7},
                {'name': 'B.Tech. Hons. LE (Mechanical Engineering)', 'link': '/academics/programs/courses/btech-hons-le-mechanical-engineering/', 'type': 'UG', 'order': 8},
                
                # M.Tech Programs
                {'name': 'M.Tech. (Civil Engineering)', 'link': '/academics/programs/courses/mtech-civil-engineering/', 'type': 'PG', 'order': 1},
                {'name': 'M.Tech. (Electronics & Communication)', 'link': '/academics/programs/courses/mtech-electronics-communication-engineering/', 'type': 'PG', 'order': 2},
                {'name': 'M.Tech. (Electrical & Electronics)', 'link': '/academics/programs/courses/mtech-electrical-electronics-engineering/', 'type': 'PG', 'order': 3},
                {'name': 'M.Tech. (Mechanical Engineering)', 'link': '/academics/programs/courses/mtech-mechanical-engineering/', 'type': 'PG', 'order': 4},
                
                # Ph.D. Programs
                {'name': 'Ph.D. (Civil Engineering)', 'link': '/academics/programs/courses/phd-civil-engineering/', 'type': 'PG', 'order': 5},
                {'name': 'Ph.D. (Electronics & Communication)', 'link': '/academics/programs/courses/phd-electronics-communication-engineering/', 'type': 'PG', 'order': 6},
                {'name': 'Ph.D. (Electrical & Electronics)', 'link': '/academics/programs/courses/phd-electrical-electronics-engineering/', 'type': 'PG', 'order': 7},
                {'name': 'Ph.D. (Mechanical Engineering)', 'link': '/academics/programs/courses/phd-mechanical-engineering/', 'type': 'PG', 'order': 8},
                
                # Diploma Programs
                {'name': 'Diploma (Civil Engineering)', 'link': '/academics/programs/courses/diploma-civil-engineering/', 'type': 'DP', 'order': 1},
                {'name': 'Diploma (Electronics & Electronics)', 'link': '/academics/programs/courses/diploma-electronics-electronics-engineering/', 'type': 'DP', 'order': 2},
                {'name': 'Diploma (Mechanical Engineering)', 'link': '/academics/programs/courses/diploma-mechanical-engineering/', 'type': 'DP', 'order': 3},
                {'name': 'Diploma (Electronics & Communication)', 'link': '/academics/programs/courses/diploma-electronics-communication-engineering/', 'type': 'DP', 'order': 4},
            ]
            
            # 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 & Doctoral 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 Engineering not found!')
            )
        except Exception as e:
            self.stdout.write(
                self.style.ERROR(f'Error occurred: {str(e)}')
            )
