#!/bin/env python3

import logging as log
import flask

from .config_utils import config_utils

class config():
    @staticmethod
    def filter(config_data: dict, filter_keyword: str) -> tuple[bool, dict]:
        '''
        Helper function to grab a specific part of the config
        '''
        lower_filter_keyword = filter_keyword.lower()

        for section_name, section_values in config_data.items():
            if str(section_name).lower() == lower_filter_keyword:
                if isinstance(section_values, dict):
                    return True, dict(section_values)

        log.error("failed to properly filter the config")
        return False, {}

    @staticmethod
    def read() -> tuple[bool, dict]:
        '''
        check some basic things and then return the dict containing the config data
        '''

        ok, candidate_path = config_utils.search_known_paths()
        if not ok:
            log.error("failed to retrieve a valid path for the config")
            return False, {}

        ok, config_data = config_utils.read_data(candidate_path)
        if not ok:
            log.error("failed to read data from filepath")
            return False, {}

        return True, config_data

    @staticmethod
    def update(target_section: str, target_key: str, new_value) -> bool:
        lower_target_section = target_section.lower()
        lower_target_key = target_key.lower()

        ok, config_data = config.read()
        if not ok:
            log.error("failed to read the config succesfully")
            return False
        
        if not config_utils.find_section(config_data, lower_target_section):
            log.error("failed to find the given section")
            return False
        if not config_utils.find_key(config_data, lower_target_section, lower_target_key):
            log.error("failed to find the given key in the given section")
            return False

        ok = config_utils.write_key(config_data, lower_target_section, lower_target_key, new_value)
        if not ok:
            log.error("failed to write the key to the file")
            return False

        return True