#coding=utf-8

import time

from flask.ext.wtf import Form
from wtforms import StringField, SelectField, TextAreaField, ValidationError
from wtforms.validators import Required, Length, Regexp

from app.models import Site, Asset
from app.utils.utils import re_date


class AssetForm(Form):
    asset_tag = StringField(u'资产编号', validators=[Required(message=u'资产编号不能为空'), 
                     Length(1, 32, message=u'资产编号为1-32个字符')])
    types = SelectField(u'设备类型', choices=[(u'服务器', u'服务器'), (u'交换机', u'交换机'), 
                        (u'路由器', u'路由器'), (u'防火墙', u'防火墙'), (u'存储', u'存储'),
                        (u'负载均衡', u'负载均衡'), ('PC', 'PC'), (u'打印机', u'打印机'),
                        ('CPU', 'CPU' ), (u'主板', u'主板'), (u'内存', u'内存'), (u'硬盘', u'硬盘'), 
                        (u'电源', u'电源'), (u'其他', u'其他')])  
    brand = StringField(u'设备品牌', validators=[Required(message=u'资产编号不能为空'),
                        Length(1, 32, message=u'设备品牌最多为32个字符')])
    model = StringField(u'设备型号', validators=[Length(0, 32, message=u'设备型号最多为32个字符')])
    sn = StringField(u'设备SN', validators=[Length(0, 64, message=u'设备SN最多为64个字符')])
    info = TextAreaField(u"详细信息", validators=[Required(message=u'详细信息不能为空'),
                         Length(1, 500, message=u'详细为1-500个字符')])
    buy_date = StringField(u'购买日期', validators=[Regexp(re_date, message=u'购买日期格式为yyyy-mm-dd')])
    site = SelectField(u'机房')
    use = StringField(u'使用人/设备', validators=[Required(message=u'使用人/设备不能为空'),
                      Length(1, 32, message=u'使用人／设备为1-32个字符')])
    start_date = StringField(u'使用日期', validators=[Regexp(re_date, message=u'使用日期格式为yyyy-mm-dd')])
    expire_date = StringField(u'到期日期',validators=[Regexp(re_date, message=u'到期日期格式为yyyy-mm-dd')])
    remark = StringField(u'备注', validators=[Length(0, 32, message=u'备注最多32个字符')])

    def validate_asset_tag(self, field):
        if Asset.query.filter_by(asset_tag=field.data).first():
            raise ValidationError(u'添加失败 资产编号 *** %s *** 已经存在' % field.data)

    def validate_expire_date(self, field):
        start_date = time.mktime(time.strptime(self.start_date.data,'%Y-%m-%d'))
        expire_date = time.mktime(time.strptime(self.expire_date.data,'%Y-%m-%d'))
        if expire_date < start_date:
            raise ValidationError(u'添加失败 到期时间小于开通日期')
