#!/usr/bin/env python3
# -*-coding:UTF-8 -*

import os
import sys
import time
import d4_pyclient

sys.path.append(os.environ['AIL_BIN'])
##################################
# Import Project packages
##################################
from lib import ConfigLoader

config_loader = ConfigLoader.ConfigLoader()
r_serv_db = config_loader.get_db_conn("Kvrocks_DB")
r_cache = config_loader.get_redis_conn("Redis_Cache")
config_loader = None

def get_ail_uuid():
    return r_serv_db.get('ail:uuid')

def get_d4_client_config_dir():
    return os.path.join(os.environ['AIL_HOME'], 'configs', 'd4client_passiveDNS_conf')

def create_d4_config_file(filename, content):
    if not os.path.isfile(filename):
        with open(filename, 'a') as f:
            f.write(content)

def get_d4_client_config():
    d4_client_config = get_d4_client_config_dir()
    filename = os.path.join(d4_client_config, 'uuid')
    if not os.path.isfile(filename):
        create_d4_config_file(filename, get_ail_uuid())
    return d4_client_config

def is_passive_dns_enabled(cache=True):
    if cache:
        res = r_cache.get('d4:passivedns:enabled')
        if res is None:
            res = r_serv_db.hget('d4:passivedns', 'enabled') == 'True'
            r_cache.set('d4:passivedns:enabled', str(res))
            return res
        else:
            return res == 'True'
    else:
        return r_serv_db.hget('d4:passivedns', 'enabled') == 'True'

def change_passive_dns_state(new_state):
    old_state = is_passive_dns_enabled(cache=False)
    if old_state != new_state:
        r_serv_db.hset('d4:passivedns', 'enabled', str(new_state))
        r_cache.set('d4:passivedns:enabled', str(new_state))
        update_time = time.time()
        r_serv_db.hset('d4:passivedns', 'update_time', update_time)
        r_cache.set('d4:passivedns:last_update_time', update_time)
        return True
    return False

def get_config_last_update_time():
    last_update_time = r_cache.get('d4:passivedns:last_update_time')
    if not last_update_time:
        last_update_time = r_serv_db.hget('d4:passivedns', 'update_time')
        if not last_update_time:
            last_update_time = 0
        last_update_time = float(last_update_time)
        r_cache.set('d4:passivedns:last_update_time', last_update_time)
    return float(last_update_time)

def create_d4_client():
    if is_passive_dns_enabled():
        d4_client = d4_pyclient.D4Client(get_d4_client_config(), False)
        return d4_client
    else:
        return None