# -*- coding:utf-8 -*-
from urllib.parse import urlparse

from api.extensions import cache
from api.models.common_setting import CompanyInfo


class CompanyInfoCRUD(object):

    @staticmethod
    def get():
        return CompanyInfo.get_by(first=True) or {}

    @staticmethod
    def create(**kwargs):
        CompanyInfoCRUD.check_data(**kwargs)
        res = CompanyInfo.create(**kwargs)
        CompanyInfoCache.refresh(res.info)
        return res

    @staticmethod
    def update(_id, **kwargs):
        kwargs.pop('id', None)
        existed = CompanyInfo.get_by_id(_id)
        if not existed:
            existed = CompanyInfoCRUD.create(**kwargs)
        else:
            CompanyInfoCRUD.check_data(**kwargs)
            existed = existed.update(**kwargs)
        CompanyInfoCache.refresh(existed.info)
        return existed

    @staticmethod
    def check_data(**kwargs):
        info = kwargs.get('info', {})
        info['messenger'] = CompanyInfoCRUD.check_messenger(info.get('messenger', None))

        kwargs['info'] = info

    @staticmethod
    def check_messenger(messenger):
        if not messenger:
            return messenger

        parsed_url = urlparse(messenger)
        return f"{parsed_url.scheme}://{parsed_url.netloc}"


class CompanyInfoCache(object):
    key = 'CompanyInfoCache::'

    @classmethod
    def get(cls):
        info = cache.get(cls.key)
        if not info:
            res = CompanyInfo.get_by(first=True) or {}
            info = res.get('info', {})
            cache.set(cls.key, info)
        return info

    @classmethod
    def refresh(cls, info):
        cache.set(cls.key, info)