from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import UserProfile, CallForProposal, Proposal, Event, Speaker

class UserRegistrationForm(UserCreationForm):
    email = forms.EmailField(
        required=True,
        widget=forms.EmailInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter your email address'
        })
    )
    first_name = forms.CharField(
        max_length=30,
        required=True,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter your first name'
        })
    )
    last_name = forms.CharField(
        max_length=30,
        required=True,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter your last name'
        })
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Add Bootstrap classes to the default fields
        self.fields['username'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Choose a username'
        })
        self.fields['password1'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Create a password'
        })
        self.fields['password2'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Confirm your password'
        })

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('bio', 'organization', 'phone_number', 'profile_picture')
        widgets = {
            'bio': forms.Textarea(attrs={'rows': 4}),
        }

class ProposalForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.cfp = kwargs.pop('cfp', None)
        self.user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        
        # Add Bootstrap classes and placeholders
        self.fields['title'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Enter a descriptive title for your proposal'
        })
        self.fields['abstract'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Provide a clear and concise description of your presentation'
        })
        self.fields['presentation_type'].widget.attrs.update({
            'class': 'form-select'
        })
        self.fields['additional_notes'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Any additional information you\'d like to share with the reviewers'
        })
        self.fields['presentation_slides'].widget.attrs.update({
            'class': 'form-control',
            'accept': '.pdf,.ppt,.pptx'
        })
        self.fields['supporting_document'].widget.attrs.update({
            'class': 'form-control',
            'accept': '.pdf'
        })

    def save(self, commit=True):
        proposal = super().save(commit=False)
        if self.cfp:
            proposal.cfp = self.cfp
        if self.user:
            proposal.submitter = self.user
        if commit:
            proposal.save()
        return proposal

    class Meta:
        model = Proposal
        fields = (
            'title', 
            'abstract', 
            'presentation_type', 
            'presentation_slides',
            'supporting_document',
            'additional_notes'
        )
        widgets = {
            'abstract': forms.Textarea(attrs={
                'rows': 5,
                'class': 'form-control'
            }),
            'additional_notes': forms.Textarea(attrs={
                'rows': 3,
                'class': 'form-control'
            }),
            'presentation_type': forms.Select(attrs={
                'class': 'form-select'
            })
        }

class EventSearchForm(forms.Form):
    query = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={'placeholder': 'Search events or speakers...'})
    )
    date_from = forms.DateField(
        required=False,
        widget=forms.DateInput(attrs={'type': 'date'})
    )
    date_to = forms.DateField(
        required=False,
        widget=forms.DateInput(attrs={'type': 'date'})
    )
    status = forms.ChoiceField(
        required=False,
        choices=[('', 'All')] + list(Event.STATUS_CHOICES)
    )

class SpeakerForm(forms.ModelForm):
    class Meta:
        model = Speaker
        fields = ('name', 'bio', 'photo', 'organization', 'website', 'social_media')
        widgets = {
            'bio': forms.Textarea(attrs={'rows': 4}),
            'social_media': forms.TextInput(attrs={'placeholder': 'Twitter, LinkedIn, etc.'})
        }
