from django import forms
from django.contrib.auth import get_user_model
from django.db import transaction
from .models import StudentProfile, TeacherProfile, Rating, Course, Lesson, WikiPost

class RatingForm(forms.ModelForm):
    class Meta:
        model = Rating
        fields = ['teacher', 'clarity_score', 'practical_score', 'professionalism_score', 'comment']
        widgets = {
            'teacher': forms.Select(attrs={'class': 'w-full rounded-xl border-gray-200 focus:border-primary focus:ring-primary'}),
            'clarity_score': forms.NumberInput(attrs={'min': 1, 'max': 5}),
            'practical_score': forms.NumberInput(attrs={'min': 1, 'max': 5}),
            'professionalism_score': forms.NumberInput(attrs={'min': 1, 'max': 5}),
            'comment': forms.Textarea(attrs={'rows': 3}),
        }

User = get_user_model()

class DualRegistrationForm(forms.ModelForm):
    ROLE_CHOICES = (
        ('student', 'طالب'),
        ('teacher', 'معلم'),
    )
    role_selection = forms.ChoiceField(choices=ROLE_CHOICES, widget=forms.RadioSelect, initial='student', label='تسجيل كـ')
    password = forms.CharField(widget=forms.PasswordInput, label='كلمة المرور')
    seat_number = forms.CharField(required=False, label='رقم الجلوس')
    class_level = forms.CharField(required=False, label='المرحلة الدراسية')
    department = forms.CharField(required=False, label='القسم / المادة')
    teacher_id = forms.CharField(required=False, label='الرقم الوظيفي للمعلم')

    class Meta:
        model = User
        fields = ['username', 'email', 'first_name', 'last_name']

    def clean(self):
        cleaned_data = super().clean()
        role = cleaned_data.get('role_selection')
        if role == 'student':
            if not cleaned_data.get('seat_number'):
                self.add_error('seat_number', 'رقم الجلوس مطلوب للطلاب.')
            if not cleaned_data.get('class_level'):
                self.add_error('class_level', 'المرحلة الدراسية مطلوبة.')
        elif role == 'teacher':
            if not cleaned_data.get('department'):
                self.add_error('department', 'القسم مطلوب للمعلمين.')
            if not cleaned_data.get('teacher_id'):
                self.add_error('teacher_id', 'الرقم الوظيفي مطلوب للتحقق.')
        return cleaned_data

    @transaction.atomic
    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data['password'])
        user.role = self.cleaned_data['role_selection']
        if commit:
            user.save()
            if user.role == 'student':
                StudentProfile.objects.create(
                    user=user,
                    seat_number=self.cleaned_data['seat_number'],
                    class_level=self.cleaned_data['class_level']
                )
            elif user.role == 'teacher':
                TeacherProfile.objects.create(
                    user=user,
                    department=self.cleaned_data['department'],
                    specialization=f"ID: {self.cleaned_data['teacher_id']}",
                    is_approved=False
                )
        return user


# ──────────────────────────────────────────────
# Profile Update Forms
# ──────────────────────────────────────────────

INPUT_CLASS = 'w-full rounded-xl border border-gray-200 bg-gray-50 p-3 focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary'

class TeacherProfileForm(forms.ModelForm):
    first_name = forms.CharField(required=False, label='الاسم الأول', max_length=150,
        widget=forms.TextInput(attrs={'class': INPUT_CLASS}))
    last_name = forms.CharField(required=False, label='الاسم الأخير', max_length=150,
        widget=forms.TextInput(attrs={'class': INPUT_CLASS}))

    class Meta:
        model = TeacherProfile
        fields = ['department', 'specialization', 'bio', 'photo']
        widgets = {
            'department': forms.TextInput(attrs={'class': INPUT_CLASS}),
            'specialization': forms.TextInput(attrs={'class': INPUT_CLASS}),
            'bio': forms.Textarea(attrs={'class': INPUT_CLASS, 'rows': 4, 'placeholder': 'نبذة قصيرة عن نفسك وخبراتك التعليمية...'}),
            'photo': forms.FileInput(attrs={'class': 'hidden', 'id': 'photo-upload', 'accept': 'image/*'}),
        }
        labels = {
            'department': 'القسم / المادة',
            'specialization': 'التخصص الدقيق',
            'bio': 'نبذة تعريفية',
            'photo': 'الصورة الشخصية',
        }


class StudentProfileForm(forms.ModelForm):
    first_name = forms.CharField(required=False, label='الاسم الأول', max_length=150,
        widget=forms.TextInput(attrs={'class': INPUT_CLASS}))
    last_name = forms.CharField(required=False, label='الاسم الأخير', max_length=150,
        widget=forms.TextInput(attrs={'class': INPUT_CLASS}))

    class Meta:
        model = StudentProfile
        fields = ['class_level', 'farm_plot_number', 'photo']
        widgets = {
            'class_level': forms.TextInput(attrs={'class': INPUT_CLASS}),
            'farm_plot_number': forms.TextInput(attrs={'class': INPUT_CLASS}),
            'photo': forms.FileInput(attrs={'class': 'hidden', 'id': 'photo-upload', 'accept': 'image/*'}),
        }
        labels = {
            'class_level': 'المرحلة الدراسية',
            'farm_plot_number': 'رقم المقطع الزراعي',
            'photo': 'الصورة الشخصية',
        }


# ──────────────────────────────────────────────
# Wiki / Articles Form
# ──────────────────────────────────────────────

class WikiPostForm(forms.ModelForm):
    class Meta:
        from .models import WikiPost
        model = WikiPost
        fields = ['title', 'category', 'summary', 'content', 'cover_image']
        widgets = {
            'title': forms.TextInput(attrs={
                'class': INPUT_CLASS,
                'placeholder': 'عنوان المقال...',
            }),
            'category': forms.Select(attrs={
                'class': INPUT_CLASS,
            }),
            'summary': forms.Textarea(attrs={
                'class': INPUT_CLASS,
                'rows': 3,
                'placeholder': 'ملخص مختصر للمقال (سيظهر في بطاقة المعاينة)...',
            }),
            'content': forms.Textarea(attrs={
                'class': 'w-full rounded-xl border border-gray-200 bg-gray-50 p-4 focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary font-mono leading-relaxed',
                'rows': 16,
                'placeholder': 'اكتب محتوى مقالك هنا...',
            }),
            'cover_image': forms.FileInput(attrs={
                'class': 'hidden',
                'id': 'cover-upload',
                'accept': 'image/*',
            }),
        }
        labels = {
            'title': 'عنوان المقال',
            'category': 'تصنيف المقال',
            'summary': 'ملخص مختصر',
            'content': 'محتوى المقال',
            'cover_image': 'صورة الغلاف',
        }


# ──────────────────────────────────────────────
# Courses & Lessons Forms
# ──────────────────────────────────────────────

class CourseForm(forms.ModelForm):
    class Meta:
        model = Course
        fields = ['title', 'description', 'level', 'cover_image', 'is_paid', 'price', 'payment_instructions']
        widgets = {
            'title': forms.TextInput(attrs={
                'class': INPUT_CLASS,
                'placeholder': 'عنوان الكورس...',
            }),
            'description': forms.Textarea(attrs={
                'class': INPUT_CLASS,
                'rows': 3,
                'placeholder': 'وصف مختصر لما سيتعلمه الطلاب في هذا الكورس...',
            }),
            'level': forms.Select(attrs={'class': INPUT_CLASS}),
            'cover_image': forms.FileInput(attrs={
                'class': 'hidden',
                'id': 'course-cover-upload',
                'accept': 'image/*',
            }),
            'is_paid': forms.CheckboxInput(attrs={'class': 'w-5 h-5 text-primary rounded'}),
            'price': forms.NumberInput(attrs={'class': INPUT_CLASS, 'placeholder': '0.00'}),
            'payment_instructions': forms.Textarea(attrs={
                'class': INPUT_CLASS,
                'rows': 4,
                'placeholder': 'مثال: قم بالتحويل إلى رقم 010xxxxxxxx فودافون كاش ثم ارفع صورة الإيصال هنا...',
            }),
        }
        labels = {
            'title': 'عنوان الكورس',
            'description': 'وصف الكورس',
            'level': 'المرحلة الدراسية',
            'cover_image': 'صورة الغلاف',
            'is_paid': 'كورس مدفوع؟',
            'price': 'سعر الكورس (ج.م)',
            'payment_instructions': 'تعليمات الدفع والتحويل',
        }

class EnrollmentForm(forms.ModelForm):
    class Meta:
        from .models import Enrollment
        model = Enrollment
        fields = ['payment_screenshot']
        widgets = {
            'payment_screenshot': forms.FileInput(attrs={'class': INPUT_CLASS, 'accept': 'image/*'}),
        }
        labels = {
            'payment_screenshot': 'ارفع صورة إيصال التحويل (فودافون كاش / انستا باي)',
        }


class LessonForm(forms.ModelForm):
    class Meta:
        model = Lesson
        fields = ['title', 'description', 'text_content', 'video_url', 'video_file', 'image', 'order']
        widgets = {
            'title': forms.TextInput(attrs={
                'class': INPUT_CLASS,
                'placeholder': 'عنوان الدرس...',
            }),
            'description': forms.Textarea(attrs={
                'class': INPUT_CLASS,
                'rows': 2,
                'placeholder': 'وصف مختصر للدرس (اختياري)...',
            }),
            'text_content': forms.Textarea(attrs={
                'class': 'w-full rounded-xl border border-gray-200 bg-gray-50 p-4 focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary leading-relaxed',
                'rows': 10,
                'placeholder': 'اكتب شرح الدرس هنا...',
            }),
            'video_url': forms.URLInput(attrs={
                'class': INPUT_CLASS,
                'placeholder': 'https://www.youtube.com/watch?v=...',
                'dir': 'ltr',
            }),
            'video_file': forms.FileInput(attrs={
                'class': 'hidden',
                'id': 'lesson-video-upload',
                'accept': 'video/*',
            }),
            'image': forms.FileInput(attrs={
                'class': 'hidden',
                'id': 'lesson-image-upload',
                'accept': 'image/*',
            }),
            'order': forms.NumberInput(attrs={
                'class': INPUT_CLASS,
                'min': 1,
            }),
        }
        labels = {
            'title': 'عنوان الدرس',
            'description': 'وصف مختصر (اختياري)',
            'text_content': 'شرح نصي',
            'video_url': 'رابط فيديو (YouTube أو أي موقع)',
            'video_file': 'رفع ملف فيديو',
            'image': 'صورة توضيحية',
            'order': 'ترتيب الدرس',
        }
