from src.config.objects import TargetObject
from src.converter.converter import CSVStringConverter
from src.error.exceptions import DataConvertException
from src.system_var.constants import CONV_JP_NAME
from src.util.logger import logger_instance as logger


def convert_crm_csv_data_process(target_object: TargetObject, crm_data_response: dict):
    """CSV変換処理

    Args:
        target_object (TargetObject): 取得対象オブジェクト情報インスタンス
        crm_data_response (dict): Salesforceオブジェクトデータ

    Raises:
        DataConvertException: データ変換が失敗した場合

    Returns:
        csv_string: csvデータ
    """

    # ① CSV変換処理の開始ログを出力する
    target_object_name = target_object.object_name

    logger.info(f'I-CONV-01 [{target_object_name}] のCSV変換処理を開始します')

    try:
        # ② CSV変換
        csv_string_converter = CSVStringConverter(target_object, crm_data_response)
        csv_string = csv_string_converter.convert()

        logger.debug(f'D-CONV-02 [{target_object_name}] のCSV変換処理 正常終了')

    except Exception as e:
        raise DataConvertException(
            'E-CONV-01', CONV_JP_NAME, f'[{target_object_name}] CSV変換に失敗しました エラー内容:[{e}]')

    # ③ CSV変換処理の終了ログを出力する
    logger.info(f'I-CONV-03 [{target_object_name}] のCSV変換処理を終了します')

    # ④ 次の処理へ移行する
    return csv_string
