# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

from . import models
from src.core import models as core_models


class LoginForm(forms.Form):
    email = forms.EmailField(
        widget=forms.TextInput(
            attrs={
                "placeholder": "Email",
                "class": "form-control",
            }
        )
    )
    password = core_models.password_input("Password")


class SignUpForm(UserCreationForm):
    first_name = core_models.text_input(placeholder="First Name")
    last_name = core_models.text_input(placeholder="Last Name")
    email = forms.EmailField(
        widget=forms.EmailInput(
            attrs={
                "placeholder": "Email",
                "class": "form-control",
            }
        )
    )
    password1 = core_models.password_input("Password")
    password2 = core_models.password_input("Password Confirmation")

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

    def clean_email(self):
        data = self.cleaned_data['email']
        duplicate_users = User.objects.filter(email=data)
        if self.instance.pk is not None:  # If you're editing a user, remove him from the duplicated results
            duplicate_users = duplicate_users.exclude(pk=self.instance.pk)
        if duplicate_users.exists():
            raise forms.ValidationError("Email is already registered. Use login.")
        return data


class ProfileForm(forms.ModelForm):
    terms_accepted = forms.BooleanField(
        error_messages={'required': 'You have to accept to continue.'},
        widget=forms.CheckboxInput(
            attrs={
                'class': 'form-check-input',
            },
        ),
    )

    class Meta:
        model = models.Profile
        fields = ('terms_accepted',)


class UserEditForm(forms.ModelForm):
    first_name = core_models.text_input(placeholder="First Name")
    last_name = core_models.text_input(placeholder="Last Name")

    class Meta:
        model = User
        fields = ('first_name', 'last_name')


class ProfileEditForm(forms.ModelForm):
    gender = core_models.select_input(choices=models.Profile.Gender.choices)
    race = core_models.select_input(choices=models.Profile.Race.choices)
    phone_number = core_models.text_input(required=False, placeholder='082 123 4567')
    birthday = core_models.date_input(required=False)
    city = core_models.text_input(required=False, placeholder='City')
    province = core_models.select_input(choices=models.Profile.Province.choices)
    postal_code = core_models.text_input(required=False, placeholder='0000')
    profile_photo = core_models.file_input(required=False)
    cover_photo = core_models.file_input(required=False)

    class Meta:
        model = models.Profile
        fields = ('gender', 'race', 'phone_number', 'birthday', 'city', 'province', 'postal_code', 'profile_photo', 'cover_photo')
