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

from __future__ import division

from datetime import datetime

from django.conf import settings
from django.db.models import Q
from django_logit import logit
from django_response import response
from paginator import pagination
from TimeConvert import TimeConvert as tc

from account.models import LensmanInfo, LensmanIntegralIncomeExpensesInfo
from kodo.decorators import check_admin


@logit
@check_admin
def lensman_list(request, administrator):
    page = request.POST.get('page', 1)
    num = request.POST.get('num', 20)
    query = request.POST.get('query', '')
    lensman_status = request.POST.get('lensman_status', '')
    end_date = tc.to_date(request.POST.get('end_date', ''))
    integral_end_date_start = request.POST.get('integral_end_date_start', '')
    integral_end_date_end = request.POST.get('integral_end_date_end', '')

    logs = LensmanInfo.objects.filter(status=True).order_by('-pk')

    if query:
        logs = logs.filter(Q(name__icontains=query) | Q(phone__icontains=query))

    if lensman_status:
        logs = logs.filter(lensman_status=lensman_status)

    if end_date:
        logs = logs.filter(end_date__lte=end_date)

    if integral_end_date_start and integral_end_date_end:
        ftime = datetime.strptime(
            integral_end_date_start + ' 00:00:00', '%Y%m%d %H:%M:%S')
        ttime = datetime.strptime(
            integral_end_date_end + ' 23:59:59', '%Y%m%d %H:%M:%S')
        logs = logs.filter(integral_end_date__range=[ftime, ttime])

    count = logs.count()
    logs, left = pagination(logs, page, num)
    logs = [log.admindata for log in logs]

    return response(data={
        'logs': logs,
        'left': left,
        'count': count,
    })


@logit
@check_admin
def lensman_audit(request, administrator):
    lensman_id = request.POST.get('lensman_id', '')
    start_date = tc.to_date(request.POST.get('start_date', ''))
    end_date = tc.to_date(request.POST.get('end_date', ''))

    try:
        lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
    except LensmanInfo.DoesNotExist:
        return response(200, 'Lensman Not Found', u'摄影师不存在')

    lensman.lensman_status = LensmanInfo.ACTIVATED
    lensman.start_date = start_date
    lensman.end_date = end_date

    lensman.save()

    return response(200, 'Lensman Audit Pass Suceess', u'摄影师审核通过')


@logit
@check_admin
def lensman_update(request, administrator):
    lensman_id = request.POST.get('lensman_id', '')
    start_date = tc.to_date(request.POST.get('start_date', ''))
    end_date = tc.to_date(request.POST.get('end_date', ''))
    integral_start_date = tc.to_date(
        request.POST.get('integral_start_date', ''))
    integral_end_date = tc.to_date(request.POST.get('integral_end_date', ''))
    name = request.POST.get('name', '')
    phone = request.POST.get('phone', '')
    remark = request.POST.get('remark', '')
    identity_card_name = request.POST.get('identity_card_name', '')
    identity_card_number = request.POST.get('identity_card_number', '')

    try:
        lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
    except LensmanInfo.DoesNotExist:
        return response(200, 'Lensman Not Found', u'摄影师不存在')

    lensman.start_date = start_date
    lensman.end_date = end_date
    lensman.integral_start_date = integral_start_date
    lensman.integral_end_date = integral_end_date
    lensman.name = name
    lensman.phone = phone
    lensman.remark = remark
    lensman.identity_card_name = identity_card_name
    lensman.identity_card_number = identity_card_number

    lensman.save()

    return response(200, 'Lensman Info Update Suceess', u'摄影师信息更新成功')


@logit
@check_admin
def lensman_integral_list(request, administrator):
    user_id = request.POST.get('user_id', '')

    try:
        lensman = LensmanInfo.objects.get(user_id=user_id, status=True)
    except LensmanInfo.DoesNotExist:
        return response(200, 'Lensman Not Found', u'摄影师不存在')

    integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(
        user_id=user_id, status=True)

    integrals = [integral.admindata for integral in integrals]

    return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)


@logit
def lensman_integral_update(request):
    user_id = request.POST.get('user_id', '')
    integral = int(request.POST.get('integral', 0))
    remark = request.POST.get('remark', '')
    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID

    try:
        lensman = LensmanInfo.objects.get(user_id=user_id, status=True)
    except LensmanInfo.DoesNotExist:
        return response(200, 'Lensman Not Found', u'摄影师不存在')

    lensman.integral += integral
    lensman.save()

    LensmanIntegralIncomeExpensesInfo.objects.create(
        brand_id=brand_id,
        user_id=user_id,
        integral=integral,
        remark=remark,
        expired_at=lensman.integral_end_date,
    )

    return response(200, 'Lensman Integral Update Success', u'摄影师积分更新成功')