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

from django.conf import settings
from django_response import response
from pywe_storage import RedisStorage
from pywe_wxa_qrcode import get_wxa_code_unlimit

from miniapp.models import SceneInfo
from utils.qiniucdn import qiniu_file_url, upload
from utils.redis.connect import r
from utils.redis.rwxacode import get_wxa_code_qiniu_url, get_wxa_code_scene_, set_wxa_code_info


WECHAT = settings.WECHAT


def __get_wxa_code(scene, page):
    qiniu_url = get_wxa_code_qiniu_url(scene, page)

    if qiniu_url:
        return qiniu_url

    si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True)

    qiniu_url = si.qiniu_url

    if not qiniu_url:
        wxcfg = WECHAT.get('MINIAPP', {})

        appid = wxcfg.get('appID')
        secret = wxcfg.get('appsecret')

        res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r))

        if res.headers and res.headers.get('Content-disposition'):
            qiniu_url = qiniu_file_url(upload(res.content))
        else:
            qiniu_url = ''

        si.qiniu_url = qiniu_url
        si.save()

    set_wxa_code_info(scene, page, qiniu_url, si.sid)

    return qiniu_url


# Support API Cache
def get_wxa_code(request):
    scene = request.POST.get('scene', '')
    page = request.POST.get('page', '')

    qiniu_url = __get_wxa_code(scene, page)

    if not settings.QINIU_FILE_URL_HTTPS:
        qiniu_url = qiniu_url.replace(settings.QINIU_FILE_URL_BEFORE, settings.QINIU_FILE_URL_AFTER).replace(settings.QINIU_FILE_URL_BEFORE2, settings.QINIU_FILE_URL_AFTER)

    return response(data={
        'qiniu_url': qiniu_url,
    })


def get_wxa_code_scene(request):
    sid = request.POST.get('sid', '')

    scene = get_wxa_code_scene_(sid)

    if scene:
        return response(data={
            'scene': scene,
        })

    try:
        scene = SceneInfo.objects.get(sid=sid, status=True)
    except SceneInfo.DoesNotExist:
        return response()

    return response(data={
        'scene': scene.scene,
    })