"Based on the client, adjust the config"

import logging
import sys
from ast import Raise

sys.path.append(r".")


from pptx.util import Inches

from configs.client.default import DefaultConfig
from configs.client.ExitEdge import ExitEdgeConfig
from configs.client.FirstChoice import FirstChoice
from configs.client.IAG import IAGConfig
from configs.client.kenyon import KenyonConfig
from configs.client.sunbelt import SunbeltConfig
from configs.client.sunbelt_dallas_metro import SunbeltDallasMetroConfig
from configs.client.tequity import TequityConfig
from configs.client.XCM import XCMConfig
from services.ppt_generator.configs.standard_configs import (DefaultSettings,
                                                             SlideWorkArea)


class ClientConfig:
    "Based on the client, adjust the config"
    client_mapping = {
        "sunbelt": SunbeltConfig,
        "Sunbelt_Dallas_Metro": SunbeltDallasMetroConfig,
        "FirstChoice": FirstChoice,
        "tequity": TequityConfig,
        "ExitEdge": ExitEdgeConfig,
        "IAG": IAGConfig,
        "xcm": XCMConfig,
        "xcm_default": XCMConfig,
        "kenyon": KenyonConfig,
        "default": DefaultConfig,
    }

    def __init__(self, client):
        self.client = client
        self.client_config = self.get_client_config()
        self.config_instance = None

    def init_default_with_custom_values(self, config_dict: dict):
        "Initialize the client config with custom values"
        self.config_instance = DefaultConfig.init_with_custom_values(config_dict)
        return self.config_instance

    def get_default_dict(self):
        "Get the default config"
        return DefaultConfig.get_default_dict()

    def get_client_config(self):
        "Get the client config"
        try:
            self.client_config = self.client_mapping[self.client]
            return self.client_config

        except KeyError:
            logging.error("Client %s not found in the mapping", self.client)
            Raise("Client not found in the mapping")
            # return None


if __name__ == "__main__":
    "Test the config"

    sunbelt_config = ClientConfig("xcm").get_client_config()
    print(sunbelt_config.client)
    print(sunbelt_config.slide_work_area)
