# -*- coding: utf-8 -*-

from django.db import models
from django.utils.translation import ugettext_lazy as _
from jsonfield import JSONField

from pai2.basemodels import CreateUpdateMixin


class LensmanInfo(CreateUpdateMixin):
    MALE = 1
    FEMALE = 0

    SEX_TYPE = (
        (MALE, u'男'),
        (FEMALE, u'女'),
    )

    REFUSED = -1
    UNVERIFIED = 0
    ACTIVATED = 1
    DISABLED = 2
    DELETED = 3
    ASSIGN = 10

    USER_STATUS = (
        (REFUSED, u'已拒绝'),
        (UNVERIFIED, u'未验证'),
        (ACTIVATED, u'已激活'),
        (DISABLED, u'已禁用'),
        (DELETED, u'已删除'),
        (ASSIGN, u'已分配'),
    )

    lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True, unique=True)

    unionid = models.CharField(_(u'unionid'), max_length=255, blank=True, null=True, help_text=u'微信 Union ID', db_index=True, unique=True)

    username = models.CharField(_(u'username'), max_length=255, blank=True, null=True, help_text=u'摄影师用户名', db_index=True, unique=True)
    password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'摄影师密码')
    encryption = models.CharField(_(u'encryption'), max_length=255, blank=True, null=True, help_text=u'摄影师密码')

    name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'摄影师姓名')
    sex = models.IntegerField(_(u'sex'), choices=SEX_TYPE, default=MALE, help_text=u'摄影师性别')
    phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'摄影师电话', db_index=True, unique=True)
    location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'摄影师地址')

    proportion = models.FloatField(_(u'proportion'), default=1.0, help_text=u'摄影师分成比例(0.0 ~ 1.0)')

    balance = models.IntegerField(_(u'balance'), default=0, help_text=u'摄影师余额(分)')

    user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED)
    refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因')

    signup_ip = models.CharField(_(u'signup_ip'), max_length=255, blank=True, null=True, help_text=_(u'注册IP'))
    login_ip = models.CharField(_(u'login_ip'), max_length=255, blank=True, null=True, help_text=_(u'登录IP'))
    login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=_(u'登录时间'))

    class Meta:
        verbose_name = _(u'lensmaninfo')
        verbose_name_plural = _(u'lensmaninfo')

    def __unicode__(self):
        return unicode(self.pk)

    @property
    def data(self):
        return {
            'name': self.name,
            'sex': self.sex,
            'phone': self.phone,
            'location': self.location,
            'status': self.user_status,
            'refused_reason': self.refused_reason,
        }


class LensmanLoginLogInfo(CreateUpdateMixin):
    SUCCESS = 0
    PWD_ERROR = 1
    OTHER = 2

    LOGIN_RESULT = (
        (SUCCESS, u'登录成功'),
        (PWD_ERROR, u'密码错误'),
        (OTHER, u'其他'),
    )

    lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)
    login_ip = models.CharField(_(u'login_ip'), max_length=255, blank=True, null=True, help_text=_(u'登录IP'))
    login_result = models.IntegerField(_(u'login_result'), choices=LOGIN_RESULT, default=SUCCESS)

    class Meta:
        verbose_name = _(u'lensmanloginloginfo')
        verbose_name_plural = _(u'lensmanloginloginfo')

    def __unicode__(self):
        return unicode(self.pk)


class LensmanIncomeExpensesInfo(CreateUpdateMixin):
    INCOME = 0
    EXPENSE = 1

    TYPE = (
        (INCOME, u'收入'),
        (EXPENSE, u'支出'),
    )

    lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)
    photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'照片唯一标识', db_index=True)

    type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别')
    amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)')
    balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)')

    remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')

    class Meta:
        verbose_name = _(u'lensmanincomeexpensesinfo')
        verbose_name_plural = _(u'lensmanincomeexpensesinfo')

    def __unicode__(self):
        return unicode(self.pk)


class WechatInfo(CreateUpdateMixin):
    MALE = 1
    FEMALE = 0

    SEX_TYPE = (
        (MALE, u'男'),
        (FEMALE, u'女'),
    )

    unionid = models.CharField(_(u'unionid'), max_length=255, blank=True, null=True, help_text=u'微信 Union ID')
    openids = JSONField(_(u'openids'), blank=True, null=True, help_text=u'微信 Open IDs')
    sex = models.IntegerField(_(u'sex'), choices=SEX_TYPE, default=MALE, help_text=u'用户性别')
    nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户昵称')
    headimgurl = models.CharField(_(u'headimgurl'), max_length=255, blank=True, null=True, help_text=u'用户头像')
    country = models.CharField(_(u'country'), max_length=255, blank=True, null=True, help_text=u'用户国家')
    province = models.CharField(_(u'province'), max_length=255, blank=True, null=True, help_text=u'用户省份')
    city = models.CharField(_(u'city'), max_length=255, blank=True, null=True, help_text=u'用户城市')
    location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')

    class Meta:
        verbose_name = _(u'wechatinfo')
        verbose_name_plural = _(u'wechatinfo')

    def __unicode__(self):
        return unicode(self.pk)


class UserInfo(CreateUpdateMixin):
    APP_USER = 0
    WX_USER = 1
    GUEST_USER = 9
    LENSMAN_USER = 10

    USER_FROM = (
        (APP_USER, u'APP 创建用户'),
        (WX_USER, u'微信授权用户'),
        (GUEST_USER, u'游客用户'),
        (LENSMAN_USER, u'摄影师用户'),
    )

    UNVERIFIED = 0
    ACTIVATED = 1
    DISABLED = 2
    DELETED = 3
    ASSIGN = 10

    USER_STATUS = (
        (UNVERIFIED, u'未验证'),
        (ACTIVATED, u'已激活'),
        (DISABLED, u'已禁用'),
        (DELETED, u'已删除'),
        (ASSIGN, u'已分配'),
    )

    MALE = 1
    FEMALE = 0

    SEX_TYPE = (
        (MALE, u'男'),
        (FEMALE, u'女'),
    )

    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True, unique=True)

    user_from = models.IntegerField(_(u'user_from'), choices=USER_FROM, default=APP_USER, help_text=u'用户来源')
    uuid = models.CharField(_(u'uuid'), max_length=255, blank=True, null=True, help_text=u'通用唯一识别码 (Universally Unique Identifier)', db_index=True)
    # APP 创建用户
    username = models.CharField(_(u'username'), max_length=255, blank=True, null=True, help_text=u'用户用户名', db_index=True, unique=True)
    password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'用户密码')
    # 微信授权用户
    openid = models.CharField(_(u'openid'), max_length=255, blank=True, null=True, help_text=u'微信 Open ID', db_index=True, unique=True)
    unionid = models.CharField(_(u'unionid'), max_length=255, blank=True, null=True, help_text=u'微信 Union ID', db_index=True, unique=True)
    # 用户基本信息
    name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名')
    sex = models.IntegerField(_(u'sex'), choices=SEX_TYPE, default=MALE, help_text=u'用户性别')
    nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户昵称')
    avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像')
    phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'用户电话', db_index=True, unique=True)
    country = models.CharField(_(u'country'), max_length=255, blank=True, null=True, help_text=u'用户国家')
    province = models.CharField(_(u'province'), max_length=255, blank=True, null=True, help_text=u'用户省份')
    city = models.CharField(_(u'city'), max_length=255, blank=True, null=True, help_text=u'用户城市')
    location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')

    balance = models.IntegerField(_(u'balance'), default=0, help_text=u'用户余额(分)')

    user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED)

    assign_ip = models.CharField(_(u'assign_ip'), max_length=255, blank=True, null=True, help_text=_(u'分配IP'))
    assign_at = models.DateTimeField(_(u'assign_at'), blank=True, null=True, help_text=_(u'分配时间'))

    signup_ip = models.CharField(_(u'signup_ip'), max_length=255, blank=True, null=True, help_text=_(u'注册IP'))
    signup_at = models.DateTimeField(_(u'signup_at'), blank=True, null=True, help_text=_(u'注册时间'))

    login_ip = models.CharField(_(u'login_ip'), max_length=255, blank=True, null=True, help_text=_(u'登录IP'))
    login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=_(u'登录时间'))

    class Meta:
        verbose_name = _(u'userinfo')
        verbose_name_plural = _(u'userinfo')

    def __unicode__(self):
        return unicode(self.pk)

    @property
    def final_nickname(self):
        if self.user_from == self.APP_USER:
            return self.username
        elif self.user_from == self.WX_USER:
            return self.nickname
        elif self.user_from == self.GUEST_USER:
            return self.nickname
        elif self.user_from == self.LENSMAN_USER:
            return self.name
        return self.nickname

    @property
    def data(self):
        return {
            'user_id': self.user_id,
            'username': self.username,
            'nickname': self.nickname,
        }


class UserLoginLogInfo(CreateUpdateMixin):
    SUCCESS = 0
    PWD_ERROR = 1
    OTHER = 2

    LOGIN_RESULT = (
        (SUCCESS, u'登录成功'),
        (PWD_ERROR, u'密码错误'),
        (OTHER, u'其他'),
    )

    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
    login_ip = models.CharField(_(u'login_ip'), max_length=255, blank=True, null=True, help_text=_(u'登录IP'))
    login_result = models.IntegerField(_(u'login_result'), choices=LOGIN_RESULT, default=SUCCESS)

    class Meta:
        verbose_name = _(u'userloginloginfo')
        verbose_name_plural = _(u'userloginloginfo')

    def __unicode__(self):
        return unicode(self.pk)


class UserIncomeExpensesInfo(CreateUpdateMixin):
    INCOME = 0
    EXPENSE = 1

    TYPE = (
        (INCOME, u'收入'),
        (EXPENSE, u'支出'),
    )

    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
    photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'照片唯一标识', db_index=True)

    type = models.IntegerField(_(u'type'), choices=TYPE, default=INCOME, help_text=u'收支类别')
    amount = models.IntegerField(_(u'amount'), default=0, help_text=u'余额增减数量(分)')
    balance = models.IntegerField(_(u'balance'), default=0, help_text=u'余额增减后数量(分)')

    remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注')

    class Meta:
        verbose_name = _(u'userincomeexpensesinfo')
        verbose_name_plural = _(u'userincomeexpensesinfo')

    def __unicode__(self):
        return unicode(self.pk)