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

from __future__ import division

import monetary
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 account.models import UserInfo
from mch.models import AdministratorInfo, ModelCameraBodyInfo, ModelInfo
from utils.error.errno_utils import AdministratorStatusCode, ProductModelStatusCode, UserStatusCode


@logit
def model_add(request):
    jancode = request.POST.get('jancode', '')
    model_name = request.POST.get('model_name', '')
    model_uni_name = request.POST.get('model_uni_name', '')
    model_full_name = request.POST.get('model_full_name', '')
    image_path = request.POST.get('image_path', '')
    image2_path = request.POST.get('image2_path', '')
    factory_yuan = request.POST.get('factory_yuan', 1000)
    integral = int(request.POST.get('integral', 100))

    category = request.POST.get('category', '')
    warehouse = request.POST.get('warehouse', '')

    admin_id = request.session.get('admin_id')

    is_important = request.POST.get('is_important', 0)

    try:
        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
    except AdministratorInfo.DoesNotExist:
        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)

    ModelInfo.objects.create(
        brand_id=administrator.brand_id,
        jancode=jancode,
        model_name=model_name,
        model_uni_name=model_uni_name,
        model_full_name=model_full_name,
        category=category,
        warehouse=warehouse,
        image=image_path,
        image2=image2_path,
        factory_yuan=factory_yuan,
        factory_fee=monetary.Yuan2Fen(factory_yuan),
        integral=integral,
        is_important=is_important,
    )

    return response(200, 'Model Add Success', u'型号添加成功')


@logit
def model_delete(request):
    model_id = request.POST.get('model_id', '')

    admin_id = request.session.get('admin_id')

    try:
        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
    except AdministratorInfo.DoesNotExist:
        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)

    try:
        modelObj = ModelInfo.objects.get(brand_id=administrator.brand_id, model_id=model_id, status=True)
    except ModelInfo.DoesNotExist:
        return response(ProductModelStatusCode.MODEL_NOT_FOUND)

    modelObj.status = False
    modelObj.save()

    return response(200, 'Model Delete Success', u'型号删除成功')


@logit
def model_update(request):
    jancode = request.POST.get('jancode', '')
    model_id = request.POST.get('model_id', '')
    model_name = request.POST.get('model_name', '')
    model_uni_name = request.POST.get('model_uni_name', '')
    model_full_name = request.POST.get('model_full_name', '')
    image_path = request.POST.get('image_path', '')
    image2_path = request.POST.get('image2_path', '')
    factory_yuan = request.POST.get('factory_yuan', 1000)
    integral = int(request.POST.get('integral', 100))

    category = request.POST.get('category', '')
    warehouse = request.POST.get('warehouse', '')

    admin_id = request.session.get('admin_id')

    is_important = request.POST.get('is_important', 0)

    try:
        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
    except AdministratorInfo.DoesNotExist:
        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)

    try:
        modelObj = ModelInfo.objects.get(brand_id=administrator.brand_id, model_id=model_id, status=True)
    except ModelInfo.DoesNotExist:
        return response(ProductModelStatusCode.MODEL_NOT_FOUND)

    if jancode:
        modelObj.jancode = jancode
    if model_name:
        modelObj.model_name = model_name
    if model_uni_name:
        modelObj.model_uni_name = model_uni_name
    if model_full_name:
        modelObj.model_full_name = model_full_name
    if category:
        modelObj.category = category
    if warehouse:
        modelObj.warehouse = warehouse
    if image_path:
        modelObj.image = image_path
    if image2_path:
        modelObj.image2 = image2_path
    if factory_yuan:
        modelObj.factory_yuan = factory_yuan
        modelObj.factory_fee = monetary.Yuan2Fen(factory_yuan)
    if integral:
        modelObj.integral = integral

    modelObj.is_important = is_important

    modelObj.save()

    return response(200, 'Model Update Success', u'型号更新成功')


@logit
def model_list(request):
    page = request.POST.get('page', 1)
    num = request.POST.get('num', 20)

    admin_id = request.session.get('admin_id')

    try:
        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
    except AdministratorInfo.DoesNotExist:
        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)

    models = ModelInfo.objects.filter(brand_id=administrator.brand_id, display=True, status=True).order_by('-pk')
    count = models.count()
    models, left = pagination(models, page, num)
    models = [mdl.admindata for mdl in models]

    return response(200, 'Get Model List Success', u'获取型号列表成功', {
        'models': models,
        'count': count,
        'left': left,
    })


@logit
def model_name_list(request):
    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
    user_id = request.POST.get('user_id', '')

    # 校验用户是否存在
    try:
        user = UserInfo.objects.get(user_id=user_id)
    except UserInfo.DoesNotExist:
        return response(UserStatusCode.USER_NOT_FOUND)

    models = ModelCameraBodyInfo.objects.filter(brand_id=brand_id, status=True).order_by('-is_important', 'model_name').values_list('model_name', flat=True)

    models = list(models)

    return response(200, 'Get Model Name List Success', u'获取型号列表成功', {
        'models': sorted(set(models), key=models.index)
    })


@logit
def model_cameras(request):
    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)

    kw = request.POST.get('kw', '')
    page = request.POST.get('page', 1)
    num = request.POST.get('num', 20)

    cameras = ModelCameraBodyInfo.objects.filter(brand_id=brand_id, status=True)
    if kw:
        cameras = cameras.filter(Q(model_name__icontains=kw) | Q(model_full_name__icontains=kw) | Q(camera_name__icontains=kw))
    cameras = cameras.order_by('-is_important', 'model_name', '-camera_market_time')
    count = cameras.count()
    cameras, left = pagination(cameras, page, num)
    cameras = [camera.data for camera in cameras]

    return response(200, 'Get Model Adaptive Camera List Success', u'获取型号适配机身列表成功', {
        'cameras': cameras,
        'count': count,
        'left': left,
    })