'''
Author: deng.yinping deng.yinping@muchinfo.cn
Date: 2025-03-10 18:16:34
LastEditors: deng.yinping deng.yinping@muchinfo.cn
LastEditTime: 2025-03-11 15:12:58
FilePath: \MTP20_i18n_Tool\src\scrip_toos.py
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import pandas as pd

class Scrip_Tools:

    @staticmethod
    def generate_enumex_sql(output_folder):
        '''
            1. 根据SQL查询，保存数据为CSV
            （select t.enumdiccode, t.enumitemname, t.enumdicname from ENUMDICITEM t order by t.enumdiccode, t.enumitemname;)
            2. 替换文件逗号为封号，改为enumdic.txt文件
            3. 用AI翻译成enumdic_data.txt 文件，去掉单引号
                prompt: 把每行的第三列翻译成英文，繁体，泰文，越南语，并附在行后，封号分隔
            4. 根据enumdic_data.txt生成09.dict_init_ex.sql
                格式: enumdiccode;enumitemname;中文;英文;繁体;泰文;越南语,
                SQL示例:
                insert into ENUMDICITEMEX (ENUMDICCODE, ENUMITEMNAME, ENUMDICNAMEZH_CN, ENUMDICNAMEEN, ENUMDICNAMEZH_TW, ENUMDICNAMETH, ENUMDICNAMEVI)
                values ('%s', %s, '%s', '%s', '%s', '%s', '%s');
        '''
        filepath = output_folder + "/enumdic/enumdic_data.txt"
        file_data = Scrip_Tools.reade_data_from_file(filepath)
        
        # 执行SQL查询
        insert_sql_1 = 'insert into ENUMDICITEMEX (ENUMDICCODE, ENUMITEMNAME, ENUMDICNAMEZH_CN, ENUMDICNAMEEN, ENUMDICNAMEZH_TW, ENUMDICNAMETH, ENUMDICNAMEVI)'
        insert_sql_2 = "values ('%s', %s, '%s', '%s', '%s', '%s', '%s');"
        
        batch_sql =[]
        
        batch_sql.append('set feedback off')
        batch_sql.append('\n')
        batch_sql.append('-- 初始化枚举扩展表')
        batch_sql.append('delete from enumdicitemex;')
        batch_sql.append('\n')
        
        for index in range(len(file_data)):
            row_data = file_data[index]
            if row_data:
                batch_sql.append(insert_sql_1)
                batch_sql.append(insert_sql_2 % (row_data[0].strip(), row_data[1].strip(),row_data[2].strip(),row_data[3].strip(),row_data[4].strip(),row_data[5].strip(),row_data[6].strip()))

        batch_sql.append('\n')
        batch_sql.append('-----------version----------------------------------------------')
        batch_sql.append("delete from UPDATEVERSION where VersionNum = '09.dict_init_ex';")
        batch_sql.append("insert into UPDATEVERSION values ('09.dict_init_ex','09.dict_init_ex.sql',sysdate);")
        batch_sql.append('----------------------------------------------------------------')
        batch_sql.append('commit;')
        batch_sql.append('\n')                                  
        batch_sql.append('prompt 09.dict_init_ex_Finished')
        
        sql_file_path = output_folder + "/09.dict_init_ex.sql"
        Scrip_Tools.write_sql_file(sql_file_path, batch_sql)
        print("09.dict_init_ex.sql文件已生成到目录:" + sql_file_path)
        
    @staticmethod
    def generate_errorcodeex_sql(output_folder):
        '''
            1. 根据SQL查询，保存数据为CSV
               (select t.errorid, t.errorcode, t.description from errorcode t order by t.errorid;)
            2. 替换文件逗号为封号，改为errorcode.txt文件
            3. 用AI翻译成errorcode_data.txt 文件,去掉单引号
                prompt: 把每行的第三列翻译成英文，繁体，泰文，越南语，并附在行后，封号分隔
            4. 根据errorcode_data.txt生成15.errorcode_ex.sql
                格式: errorid;errorcode;中文;英文;繁体;泰文;越南语,
                SQL示例:
                insert into ERRORCODEEX (ERRORID, DESCRIPTIONZH_CN, DESCRIPTIONEN, DESCRIPTIONZH_TW, DESCRIPTIONTH, DESCRIPTIONVI)
                values ('%s', '%s', '%s', '%s', '%s', '%s');
        '''
        filepath = output_folder + "/errorcode/errorcode_data.txt"
        file_data = Scrip_Tools.reade_data_from_file(filepath)
        
        # 执行SQL查询
        insert_sql_1 = 'insert into ERRORCODEEX (ERRORID, DESCRIPTIONZH_CN, DESCRIPTIONEN, DESCRIPTIONZH_TW, DESCRIPTIONTH, DESCRIPTIONVI)'
        insert_sql_2 = "values ('%s', '%s', '%s', '%s', '%s', '%s');"
        
        batch_sql =[]
        batch_sql.append('set feedback off')
        batch_sql.append('\n')
        batch_sql.append('-- 初始化错误码扩展表')
        batch_sql.append('delete from errorcodeex;')
        batch_sql.append('\n')

        for index in range(len(file_data)):
            row_data = file_data[index]
            if row_data:
                batch_sql.append(insert_sql_1)
                batch_sql.append(insert_sql_2 % (row_data[0].strip(), row_data[2].strip(),row_data[3].strip(),row_data[4].strip(),row_data[5].strip(),row_data[6].strip()))

        batch_sql.append('\n')
        batch_sql.append('-----------version----------------------------------------------')
        batch_sql.append("delete from UPDATEVERSION where VersionNum = '15.errorcode_ex';")
        batch_sql.append("insert into UPDATEVERSION values ('15.errorcode_ex','15.errorcode_ex.sql',sysdate);")
        batch_sql.append('----------------------------------------------------------------')
        batch_sql.append('commit;')
        batch_sql.append('\n')                                  
        batch_sql.append('prompt 15.errorcode_ex_Finished')
        
        sql_file_path = output_folder + "/15.errorcode_ex.sql"
        Scrip_Tools.write_sql_file(sql_file_path, batch_sql)
        
        print("15.errorcode_ex.sql文件已生成到目录:" + sql_file_path)
        
    @staticmethod
    def reade_data_from_file(file_path):
        # 存储数据的列表
        data = []

        # 读取文件
        with open(file_path, mode='r', encoding='utf') as file:
            # 遍历每一行
            for line in file:
                # 去除行末的换行符，并按分号分隔
                fields = line.strip().split(';')
                # 确保每行数据有简体中文、英文、繁体中文、泰文、越南语
                if len(fields) >= 4:
                    data_tuple = (fields[0].strip(), fields[1].strip(), fields[2].strip(), fields[3].strip(),fields[4].strip(),fields[5].strip(),fields[6].strip())
                    data.append(data_tuple)
                else:
                    print(line)
        return data
    
    @staticmethod
    def write_sql_file(file_path, arrStr):
        # 合并为单个字符串（可选分隔符）
        content = "\n".join(arrStr)  # 用换行符连接

        # 使用 utf-8-sig 编码方式来创建带有 UTF-8 BOM（字节顺序标记）的文件
        with open(file_path, "w", encoding="utf-8-sig") as f:
            f.write(content)
