import json
from django.core.management.base import BaseCommand
from courses.models import (
    Course, CourseEligibility, CourseFee, HostelFee, Semester, Subject,
    CareerProspect, Recruiter, WhyJoin, CourseHighlight, CourseImage, Testimonial, FeeDetail
)
from django.utils.dateparse import parse_datetime

class Command(BaseCommand):
    help = 'Import course data from a JSON file'

    def add_arguments(self, parser):
        parser.add_argument('json_file', type=str, help='Path to the JSON file')

    def handle(self, *args, **kwargs):
        with open(kwargs['json_file'], 'r', encoding='utf-8') as f:
            data = json.load(f)['course']

        course, _ = Course.objects.get_or_create(
            slug=data['slug'],
            defaults={
                'title': data['title'],
                'short_description': data['short_description'],
                'overview': data['overview'],
                'duration': data['duration'],
                'category': data['category'],
                'banner_image': data['banner_image'],
                'created_at': parse_datetime(data['created_at']) if data['created_at'] else None,
                'updated_at': parse_datetime(data['updated_at']) if data['updated_at'] else None,
            }
        )

        # Eligibility
        CourseEligibility.objects.update_or_create(
            course=course,
            defaults=data['eligibility']
        )

        # Fees
        fee_obj, _ = CourseFee.objects.update_or_create(
            course=course,
            defaults={
                'domestic': data['fees']['domestic'],
                'international': data['fees']['international'],
            }
        )
        for detail in data['fees']['details']:
            FeeDetail.objects.update_or_create(
                course_fee=fee_obj,
                fee_head=detail['fee_head'],
                defaults={
                    'first_year': detail['first_year'],
                    'second_year': detail['second_year'],
                    'third_year': detail['third_year'],
                    'fourth_year': detail['fourth_year'],
                    'is_one_time': detail['is_one_time'],
                }
            )

        # Hostel Fee
        HostelFee.objects.update_or_create(
            course=course,
            defaults=data['hostel_fee']
        )

        # Semesters and Subjects
        for sem in data['semesters']:
            semester_obj, _ = Semester.objects.update_or_create(
                course=course,
                number=sem['number'],
                defaults={'name': sem['name']}
            )
            for subj in sem['subjects']:
                Subject.objects.update_or_create(
                    semester=semester_obj,
                    code=subj['code'],
                    defaults={
                        'name': subj['name'],
                        'credits': subj['credits'],
                        'description': subj['description'],
                    }
                )

        # Career Prospects
        for cp in data['career_prospects']:
            CareerProspect.objects.update_or_create(
                course=course,
                title=cp['title'],
                defaults={
                    'salary_range': cp['salary_range'],
                    'description': cp['description'],
                }
            )

        # Recruiters
        for rec in data['recruiters']:
            Recruiter.objects.update_or_create(
                course=course,
                name=rec['name'],
                defaults={'logo': rec['logo']}
            )

        # Why Join
        for wj in data['why_join']:
            WhyJoin.objects.update_or_create(
                course=course,
                title=wj['title'],
                defaults={'description': wj['description']}
            )

        # Highlights
        for hl in data['highlights']:
            CourseHighlight.objects.update_or_create(
                course=course,
                title=hl['title'],
                defaults={
                    'description': hl['description'],
                    'icon': hl['icon']
                }
            )

        # Images
        for img in data['images']:
            CourseImage.objects.update_or_create(
                course=course,
                title=img['title'],
                defaults={
                    'image': img['image'],
                    'is_banner': img['is_banner']
                }
            )

        # Testimonials
        for t in data['testimonials']:
            Testimonial.objects.update_or_create(
                course=course,
                name=t['name'],
                defaults={
                    'position': t['position'],
                    'company': t['company'],
                    'content': t['content'],
                    'photo': t['photo']
                }
            )

        self.stdout.write(self.style.SUCCESS('Course and related data imported successfully!'))
