# -*- coding:utf-8 -*-
"""角色管理"""


class Role(object):
    """角色统计调用"""
    __page = 0  # 当前页
    __total_page = 0  # 总页数
    __total_rows = 0  # 总记录数

    # 构造函数
    def __init__(self, db=None, kg=None):
        # 数据库
        from kyger.db import MySQL
        self.db = db if db else MySQL()  # 数据库操作对象
        self.kg = kg  # 全局变量
        self.__limit = ''

    def list_page(self, *args, **kwargs):
        """
        分页获取角色信息，参数同list
        :return:
        """
        from kyger.utility import numeric
        # page和row的数据
        self.__page = numeric(self.kg['get'].get('page', 1), 1)  # 当前页
        if 'row' in kwargs: row = kwargs['row']  # 在kwargs里
        elif len(args) > 0: row = args[0]  # 在args里
        else: row = 10  # 默认10

        # 获取角色数据
        data = self.list(*args, **kwargs)
        # 分页模板合成
        web_url = self.kg['server'].get('WEB_URL')
        from kyger.common import page_tpl
        page_html = page_tpl(self.db.page, self.db.total_page, row, web_url)  # 获取分页模板
        self.__total_rows = self.db.total_rows  # 总记录数
        self.__total_page = self.db.total_page  # 总页数
        return {
            'list': data,
            'page_html': page_html,
            'page_data': {'page': self.db.page, 'total_page': self.db.total_page, 'total_rows': self.db.total_rows}
        }

    def list(self, row=10, start=0, date='%Y-%m-%d'):
        """
        不分页获取角色信息
        :param row: [int] 获取几条数据
        :param start: [int] 从第几条开始
        :param date: [str] 返回的日期格式，格式：'%Y-%m-%d %H:%M:%S'。缺省值'%Y-%m-%d'
        :return:
        """
        # limit
        limit = row if self.__page else '%d, %d' % (start, row)
        # where
        where = 'webid=%s' % self.kg['web']['id']
        # 查询数据
        data = self.db.list(table='role', where=where, page=self.__page, limit=limit)
        # 若大于最大页码则取最后一页
        if self.__page > self.db.total_page:
            self.__page = self.db.total_page
            data = self.db.list(table='role', page=self.__page, limit=limit)
        data = self.data_format(data, date) if data else []
        return data

    def data_format(self, data, date_format):
        """
        将数据进行整形
        :param data: [list{}] 从数据库查出的数据
        :param date_format: [str] 日期格式化：
                                %y 两位数的年份表示（00-99）  %Y 四位数的年份表示（000-9999）  %m 月份（01-12）  %d 日，月内中的一天（0-31）
                                %H 24小时制小时数（0-23）  %I 12小时制小时数（01-12）  %M 分钟数（00=59）  %S 秒（00-59）
                                %a 本地简化星期名称  %A 本地完整星期名称 %b 本地简化的月份名称, 英文  %B 本地完整的月份名称, 英文
                                %c 本地相应的日期表示和时间表示  %j 年内的一天（001-366）  %p 本地A.M.或P.M.的等价符  %U 一年中的星期数（00-53）星期天为星期的开始（第n周）
                                %w 星期（0-6），星期天为星期的开始  %W 一年中的星期数（00-53）星期一为星期的开始（第n周）   %x 本地相应的日期表示
                                %X 本地相应的时间表示  %Z 当前时区的名称  %% %号本身
        :return: [list{}] 将整形过后的数据返回
        """
        from kyger.utility import date, json2dict
        config = json2dict(file='config/admin_role.json', force=True)
        key_list = list(config.keys())
        key_list.sort()
        for i in data:
            # 权限模块
            if 'permission' in i:
                i['permission'] = json2dict(i['permission'])
                i['module'] = []
                module = []
                for model in i['permission']:
                    if model in config and i['permission'][model]['open'] == 1:
                        i['module'].append(config[model]['title'])
                        module.append(model)
                module.sort()
                i['all_flag'] = 1 if i['type'] == 99 or key_list == module else 0
            # 时间格式转换
            if 'addtime' in i: i['addtime'] = date(i['addtime'], format=date_format)
        return data
