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


import redis

from flask import current_app


class RedisHandler(object):
    def __init__(self, flask_app=None):
        self.flask_app = flask_app

    def init_app(self, app):
        self.flask_app = app
        config = self.flask_app.config
        try:
            pool = redis.ConnectionPool(
                max_connections=config.get("REDIS_MAX_CONN"),
                host=config.get("CACHE_REDIS_HOST"),
                port=config.get("CACHE_REDIS_PORT"),
                db=config.get("REDIS_DB"))
            self.r = redis.Redis(connection_pool=pool)
        except Exception as e:
            current_app.logger.error("init redis connection failed")

    # @classmethod
    # def instance(cls):
    #     if not hasattr(cls, "_instance"):
    #         cls._instance = cls()
    #     return cls._instance

    def get(self, ci_ids, key="CMDB_CI"):
        try:
            value = self.r.hmget(key, ci_ids)
        except Exception as e:
            current_app.logger.error("get redis error, %s" % str(e))
            return
        return value

    def _set(self, ci, key="CMDB_CI"):
        try:
            self.r.hmset(key, ci)
        except Exception as e:
            current_app.logger.error("set redis error, %s" % str(e))

    def add(self, ci):
        self._set(ci)

    def delete(self, ci_id, key="CMDB_CI"):
        try:
            ret = self.r.hdel(key, ci_id)
            if not ret:
                current_app.logger.warn("ci [%d] is not in redis" % ci_id)
        except Exception as e:
            current_app.logger.error("delete redis key error, %s" % str(e))


def get_page(page):
    try:
        page = int(page)
    except ValueError:
        page = 1
    if page < 1:
        page = 1
    return page


def get_per_page(per_page):
    try:
        per_page = int(per_page)
    except:
        per_page = current_app.config.get("DEFAULT_PAGE_COUNT")
    if per_page < 1:
        per_page = current_app.config.get("DEFAULT_PAGE_COUNT")
    return per_page