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

from __future__ import division

from django.conf import settings
from django_logit import logit
from django_response import response
from django.db.models import Q
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 = tc.to_date(request.POST.get('integral_end_date', ''))

    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:
       logs = logs.filter(integral_end_date__lte=integral_end_date)

    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', '')
        
    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.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'摄影师积分更新成功')