__author__ = 'tomislav'
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import authenticate

from .models import CreditCards

from utils.forms import SignupFormMixin


class LoginForm(forms.Form):
    email = forms.EmailField(label="Email address", max_length=50,
                             widget=forms.TextInput(
                                 attrs={'class': 'form-control', 'placeholder': 'Enter email'}))
    password = forms.CharField(label='Password', max_length=50,
                               widget=forms.TextInput(
                                   attrs={'class': 'form-control', 'placeholder': 'Password',
                                          'type': 'password'}))

    def clean(self):
        email = self.cleaned_data.get('email')
        password = self.cleaned_data.get('password')
        user = authenticate(email=email, password=password)
        if not user:
            raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
        return self.cleaned_data

    def login(self, request):
        username = self.cleaned_data.get('email')
        password = self.cleaned_data.get('password')
        user = authenticate(email=username, password=password)
        return user


class RegisterForm(SignupFormMixin):
    password = forms.CharField(widget=forms.PasswordInput())
    confirm_password = forms.CharField(widget=forms.PasswordInput())


class PaymentForm(forms.ModelForm):
    class Meta:
        model = CreditCards
        fields = ('name', 'card_number', 'expiry_date', 'ccv', 'user_id')
        labels = {'name': _('Name'), 'card_number': _('Card number'), 'expiry_date': _('Expiry date'),
                  'ccv': _('CCV')}
        exclude = ('user_id', 'payment_type')
        widgets = {
            'name': forms.TextInput(
                attrs={'class': 'form-control', "placeholder": "Enter name on card",
                       'placeholder': 'Enter name on card'}),
            'card_number': forms.TextInput(
                attrs={'class': 'form-control', 'placeholder': 'Card Number', 'data-stripe': 'number'}),
            'expiry_date': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'MM/YYYY'}),
            'ccv': forms.TextInput(
                attrs={'class': 'form-control', 'placeholder': 'CCV', 'data-stripe': 'cvc'})}

    def clean(self):
        data = self.cleaned_data

        # if CreditCards.objects.filter(card_number=data.get("card_number")):
        #     raise forms.ValidationError({'card_number': _('Credit card is used before.')})
        return data

    def save(self, user_id):
        self.instance.user_id = user_id
        self.instance.user_id_id = user_id.id
        super(PaymentForm, self).save()
