#coding=utf-8

from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate, login
from apps.account.tokens import token_generator

class MyAuthenticationForm(AuthenticationForm):
    class Meta:
        fields = ('username', 'password')

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(AuthenticationForm, self).__init__(*args, **kwargs)
        self.fields['username'].error_messages = {'required': u'请输入账号！'}
        self.fields['password'].error_messages = {'required': u'请输入密码！'}

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')

        if username and password:
            self.user_cache = authenticate(self.request, username=username, password=password)
            if self.user_cache is None:
                raise forms.ValidationError(
                    u'用户名或密码错误！',
                    code='invalid_login',
                    params={'username': u'账号'},
                )
            else:
                self.confirm_login_allowed(self.user_cache)
        else:
            raise forms.ValidationError(
                u'参数错误',
                code='invalid_params'
            )

        self.access_token = token_generator.make_token(self.user_cache)

        return self.cleaned_data