from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from .models import Application, ContactUs, Gallery, UserGroup
from django.forms import ModelForm, inlineformset_factory
from .models import Module, Child, Page, FileManager
from .models import Page,Blog,BlogCategory
from ckeditor.widgets import CKEditorWidget


class CustomAuthenticationForm(AuthenticationForm):
    username = forms.CharField(
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter your username'
        })
    )
    password = forms.CharField(
        widget=forms.PasswordInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter your password'
        })
    )
USERGROUP_CHOICES = [
    ('admin', 'admin'),
    ('developer', 'developer'),
]

class RegistrationForm(UserCreationForm):
    usergroup = forms.ModelChoiceField(
        queryset=UserGroup.objects.all(),
        required=True,
        empty_label="Select a usergroup",
        widget=forms.Select(attrs={
            'class': 'form-control'
        })
    )
    name = forms.CharField(
        max_length=100,
        required=True,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter name'
        })
    )
    email = forms.EmailField(
        required=True,
        widget=forms.EmailInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter email',
            'autocomplete': 'email'  # ← added
        })
    )
    image = forms.ImageField(
        required=False,
        widget=forms.FileInput(attrs={
            'class': 'form-control'
        })
    )

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2', 'usergroup', 'name', 'image']  # ← added password2
        widgets = {
            'username': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Enter username',
                'autocomplete': 'username'  # ← added
            }),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        # Fix password fields — UserCreationForm defines them outside Meta.widgets
        self.fields['password1'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Enter password',
            'autocomplete': 'new-password'  # ← added
        })
        self.fields['password2'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Confirm password',
            'autocomplete': 'new-password'  # ← added
        })

class UserGroupForm(forms.ModelForm):
    class Meta:
        model = UserGroup
        fields = ['name']
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Enter group name'
            }),
        }

class ModuleForm(ModelForm):
    class Meta:
        model = Module
        fields = ['name', 'url_name', 'icon_class']

ChildFormSet = inlineformset_factory(Module, Child, fields=('name', 'url_name'), extra=1, can_delete=True)

class PageForm(forms.ModelForm):

    description = forms.CharField(
        widget=CKEditorWidget(),
        required=False
    )

    class Meta:
        model = Page
        fields = [
            'position',
            'parent',
            'page_name',      # Added
            'title',
            'slug',           # Changed from 'url' to 'slug'
            'priority',
            'description',
            'meta_title',
            'meta_keywords',
            'meta_description',
        ]

        widgets = {
            'position': forms.Select(attrs={'class': 'form-select'}),
            'parent': forms.Select(attrs={'class': 'form-select'}),

            'page_name': forms.TextInput(attrs={'class': 'form-control'}),
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'slug': forms.TextInput(attrs={'class': 'form-control'}),        # Changed from 'url'

            'priority': forms.NumberInput(attrs={'class': 'form-control'}),

            'meta_title': forms.TextInput(attrs={'class': 'form-control'}),
            'meta_keywords': forms.TextInput(attrs={'class': 'form-control'}),
            'meta_description': forms.Textarea(attrs={
                'class': 'form-control',
                'rows': 2
            }),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Make important fields required
        self.fields['page_name'].required = True
        self.fields['title'].required = True
        self.fields['slug'].required = True

class GalleryForm(forms.ModelForm):

    class Meta:
        model = Gallery
        fields = ['title', 'image']
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'image': forms.ClearableFileInput(attrs={'class': 'form-control'}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['image'].required = False  

class FileManagerForm(forms.ModelForm):

    class Meta:
        model = FileManager
        fields = ['name', 'image']

        widgets = {

            'name': forms.TextInput(
                attrs={
                    'class': 'form-control',
                    'placeholder': 'Enter file name'
                }
            ),

            'image': forms.FileInput(
                attrs={
                    'class': 'form-control'
                }
            ),

        }
class BlogForm(forms.ModelForm):

    class Meta:
        model = Blog

        fields = [
            'category',
            'blog_name',
            'url',
            'image',
            'file',
            'short_description',
            'description',
            'meta_title',
            'meta_keywords',
            'meta_description',
        ]

        widgets = {

            'category': forms.Select(),

            'blog_name': forms.TextInput(attrs={
                'placeholder': 'Enter Blog Name'
            }),

            'url': forms.TextInput(attrs={
                'placeholder': 'URL',
                'readonly': 'readonly',
            }),

            'image': forms.ClearableFileInput(),

            'file': forms.ClearableFileInput(),

            'short_description': forms.Textarea(attrs={
                'rows': 4,
                'placeholder': 'Short Description'
            }),

           

            'meta_title': forms.TextInput(attrs={
                'placeholder': 'Meta Title'
            }),

            'meta_keywords': forms.TextInput(attrs={
                'placeholder': 'Meta Keywords'
            }),

            'meta_description': forms.Textarea(attrs={
                'rows': 3,
                'placeholder': 'Meta Description'
            }),
        }

        labels = {
            'category': 'Category',
            'blog_name': 'Blog Name',
            'url': 'URL Slug',
            'image': 'Choose an Image',
            'file': 'Choose a File',
            'short_description': 'Short Description',
            'description': 'Description',
            'meta_title': 'Meta Title',
            'meta_keywords': 'Meta Keywords',
            'meta_description': 'Meta Description',
        }
class BlogCategoryForm(forms.ModelForm):

    class Meta:
        model = BlogCategory
        fields = [
            'name',
            'url',
            'meta_title',
            'meta_keywords',
            'meta_description',
        ]

        widgets = {
            'name': forms.TextInput(),

            'url': forms.TextInput(),

            'meta_title': forms.TextInput(),

            'meta_keywords': forms.TextInput(),

            'meta_description': forms.Textarea(attrs={
                'rows': 3
            }),
        }
from django_recaptcha.fields import ReCaptchaField
from django_recaptcha.widgets import ReCaptchaV2Checkbox

class ContactForm(forms.ModelForm):
    captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox)  # ✅ add

    class Meta:
        model = ContactUs
        fields = ['first_name', 'last_name', 'email', 'phone', 'message', 'captcha']
        widgets = {
            'first_name': forms.TextInput(attrs={'placeholder': 'First Name'}),
            'last_name': forms.TextInput(attrs={'placeholder': 'Last Name'}),
            'email': forms.EmailInput(attrs={'placeholder': 'Email'}),
            'phone': forms.TextInput(attrs={'placeholder': 'Your Phone'}),
            'message': forms.Textarea(attrs={'placeholder': 'Write a Message'}),
        }

class ApplicationForm(forms.ModelForm):
    captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox)  # ✅ add

    class Meta:
        model = Application
        fields = ['name', 'email', 'phone', 'qualification', 'course', 'dob', 'location', 'captcha']
        widgets = {
            'name': forms.TextInput(attrs={'placeholder': 'Enter your name'}),
            'email': forms.EmailInput(attrs={'placeholder': 'Enter your email'}),
            'phone': forms.TextInput(attrs={'placeholder': 'Enter phone number'}),
            'qualification': forms.Select(),
            'course': forms.Select(),
            'dob': forms.DateInput(attrs={'type': 'date'}),
            'location': forms.TextInput(attrs={'placeholder': 'Enter your location'}),
        }