import django
from django import forms
from django.db import models

from crispy_forms.helper import FormHelper


class TestForm(forms.Form):
    is_company = forms.CharField(label="company", required=False, widget=forms.CheckboxInput())
    email = forms.EmailField(label="email", max_length=30, required=True, widget=forms.TextInput(), help_text="Insert your email")
    password1 = forms.CharField(label="password", max_length=30, required=True, widget=forms.PasswordInput())
    password2 = forms.CharField(label="re-enter password", max_length=30, required=True, widget=forms.PasswordInput())
    first_name = forms.CharField(label="first name", max_length=5, required=True, widget=forms.TextInput())
    last_name = forms.CharField(label="last name", max_length=5, required=True, widget=forms.TextInput())
    datetime_field = forms.DateTimeField(label="date time", widget=forms.SplitDateTimeWidget())

    def clean(self):
        super(TestForm, self).clean()
        password1 = self.cleaned_data.get('password1', None)
        password2 = self.cleaned_data.get('password2', None)
        if not password1 and not password2 or password1 != password2:
            raise forms.ValidationError("Passwords dont match")

        return self.cleaned_data


class TestForm2(TestForm):
    def __init__(self, *args, **kwargs):
        super(TestForm2, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)


class CheckboxesTestForm(forms.Form):
    checkboxes = forms.MultipleChoiceField(
        choices = (
            (1, "Option one"),
            (2, "Option two"),
            (3, "Option three")
        ),
        initial = (1,),
        widget = forms.CheckboxSelectMultiple,
    )

    alphacheckboxes = forms.MultipleChoiceField(
        choices = (
            ('option_one', "Option one"),
            ('option_two', "Option two"),
            ('option_three', "Option three")
        ),
        initial = ('option_two', 'option_three'),
        widget = forms.CheckboxSelectMultiple,
    )

    numeric_multiple_checkboxes = forms.MultipleChoiceField(
        choices = (
            (1, "Option one"),
            (2, "Option two"),
            (3, "Option three")
        ),
        initial = (1, 2),
        widget = forms.CheckboxSelectMultiple,
    )

    inline_radios = forms.ChoiceField(
        choices = (
            ('option_one', "Option one"),
            ('option_two', "Option two"),
        ),
        widget = forms.RadioSelect,
        initial = 'option_two',
    )


class CrispyTestModel(models.Model):
    email = models.CharField(max_length=20)
    password = models.CharField(max_length=20)


class TestForm3(forms.ModelForm):
    class Meta:
        model = CrispyTestModel
        fields = ['email', 'password']
        exclude = ['password']

    def __init__(self, *args, **kwargs):
        super(TestForm3, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)


class TestForm4(forms.ModelForm):
    class Meta:
        model = CrispyTestModel
        # Starting from Django 1.8, forms need to explicitly specify '__all__',
        # But this shortcut is only available in Django 1.6+.
        # Should be simplified when 1.4 support is dropped.
        if django.VERSION >= (1, 6):
            fields = '__all__'


class TestForm5(forms.Form):
    choices = [
        (1, 1),
        (2, 2),
        (1000, 1000),
    ]
    checkbox_select_multiple = forms.MultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        choices=choices
    )
    radio_select = forms.ChoiceField(
        widget=forms.RadioSelect,
        choices=choices
    )
    pk = forms.IntegerField()
