import os
import logging
import chardet  # pip install chardet

# 替换为你的目录路径
directory_path = r'D:\Dp10RepoV1\项目代码\D10myWeiao'  # T01贸易生产计划  T02贸易汇总仓库
# 设置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 定义替换列表
replacements = [
    ('dxSkinsCore,', ''),
    ('dxSkinsDefaultPainters,', ''),
    ('dxSkinWXI,', ''),
    ('dxSkinBasic,', ''),
    ('dxSkinBlack,', ''),
    ('dxSkinBlue,', ''),
    ('dxSkinBlueprint,', ''),
    ('dxSkinCaramel,', ''),
    ('dxSkinCoffee,', ''),
    ('dxSkinDarkroom,', ''),
    ('dxSkinDarkSide,', ''),
    ('dxSkinDevExpressDarkStyle,', ''),
    ('dxSkinDevExpressStyle,', ''),
    ('dxSkinFoggy,', ''),
    ('dxSkinGlassOceans,', ''),
    ('dxSkinHighContrast,', ''),
    ('dxSkiniMaginary,', ''),
    ('dxSkinLilian,', ''),
    ('dxSkinLiquidSky,', ''),
    ('dxSkinLondonLiquidSky,', ''),
    ('dxSkinMcSkin,', ''),
    ('dxSkinMetropolis,', ''),
    ('dxSkinMetropolisDark,', ''),
    ('dxSkinMoneyTwins,', ''),
    ('dxSkinOffice2007Black,', ''),
    ('dxSkinOffice2007Blue,', ''),
    ('dxSkinOffice2007Green,', ''),
    ('dxSkinOffice2007Pink,', ''),
    ('dxSkinOffice2007Silver,', ''),
    ('dxSkinOffice2010Black,', ''),
    ('dxSkinOffice2010Blue,', ''),
    ('dxSkinOffice2010Silver,', ''),
    ('dxSkinOffice2013DarkGray,', ''),
    ('dxSkinOffice2013LightGray,', ''),
    ('dxSkinOffice2013White,', ''),
    ('dxSkinOffice2016Colorful,', ''),
    ('dxSkinOffice2016Dark,', ''),
    ('dxSkinOffice2019Black,', ''),
    ('dxSkinOffice2019Colorful,', ''),
    ('dxSkinOffice2019DarkGray,', ''),
    ('dxSkinOffice2019White,', ''),
    ('dxSkinPumpkin,', ''),
    ('dxSkinSeven,', ''),
    ('dxSkinSevenClassic,', ''),
    ('dxSkinSharp,', ''),
    ('dxSkinSharpPlus,', ''),
    ('dxSkinSilver,', ''),
    ('dxSkinSpringtime,', ''),
    ('dxSkinStardust,', ''),
    ('dxSkinSummer2008,', ''),
    ('dxSkinTheAsphaltWorld,', ''),
    ('dxSkinTheBezier,', ''),
    ('dxSkinValentine,', ''),
    ('dxSkinVisualStudio2013Blue,', ''),
    ('dxSkinVisualStudio2013Dark,', ''),
    ('dxSkinVisualStudio2013Light,', ''),
    ('dxSkinVS2010,', ''),
    ('dxSkinWhiteprint,', ''),
    ('dxSkinXmas2008Blue,', ''),
    ('dxSkinXmas2008Blue;', ';')
]


def replace_in_file(file_path, replacements):
    temp_file_path = file_path + '.tmp'
    try:
        # 使用chardet检测文件编码
        with open(file_path, 'rb') as infile:
            raw_data = infile.read()
            detected_encoding = chardet.detect(raw_data)['encoding']
        with open(file_path, 'r', encoding=detected_encoding) as infile, \
                open(temp_file_path, 'w', encoding=detected_encoding) as outfile:
            # 读取整个文件内容到一个字符串中
            file_content = infile.read()
            # 对文件内容进行所有替换操作
            for old, new in replacements:
                file_content = file_content.replace(old, new)
            # 将替换后的内容写回临时文件
            outfile.write(file_content)
        # 使用os.replace原子性地替换原文件
        os.replace(temp_file_path, file_path)
        logging.info(f"Successfully processed file: {file_path} using encoding {detected_encoding}")
    except Exception as e:
        logging.error(f"Error processing file {file_path}: {e}")
        if os.path.exists(temp_file_path):
            os.remove(temp_file_path)


# =========================================批处理上述运行后出现逗号紧挨着分号的情况==============================

def remove_empty_lines_in_first_50_lines(filename):
    with open(filename, 'rb') as file:
        raw_data = file.read()
    detected_encoding = chardet.detect(raw_data)['encoding']
    with open(filename, 'r', encoding=detected_encoding) as file:
        lines = file.readlines()
    non_empty_lines = [line for line in lines[:50] if line.strip() != '']
    with open(filename, 'w', encoding=detected_encoding) as file:
        file.writelines(non_empty_lines + lines[50:])


def remove_single_semicolon_lines(filename):
    with open(filename, 'rb') as file:
        raw_data = file.read()
    detected_encoding = chardet.detect(raw_data)['encoding']
    with open(filename, 'r', encoding=detected_encoding) as file:
        lines = file.readlines()
    non_single_semicolon_lines = [line for line in lines if line.strip() != ';' and line.strip() != '']
    with open(filename, 'w', encoding=detected_encoding) as file:
        file.writelines(non_single_semicolon_lines)


def modify_last_comma_line(filename):
    with open(filename, 'rb') as file:
        raw_data = file.read()
    detected_encoding = chardet.detect(raw_data)['encoding']
    with open(filename, 'r', encoding=detected_encoding) as file:
        lines = file.readlines()
    if len(lines) > 50:
        first_50_lines = lines[:50]
        # 找到仅包含 "type" 的行
        type_lines = [line for line in first_50_lines if "type" in line]
        if type_lines:
            # 获取 "type" 行的上一行
            last_type_line_index = first_50_lines.index(type_lines[-1]) - 1
            last_type_line = first_50_lines[last_type_line_index]
            if last_type_line.strip().endswith(','):
                # 找到最后一个逗号的位置
                last_comma_index = last_type_line.rfind(',')
                # 将最后一个逗号替换为分号
                lines[lines.index(last_type_line)] = last_type_line[:last_comma_index] + ';\n'
    with open(filename, 'w', encoding=detected_encoding) as file:
        file.writelines(lines)


def replace_in_folder(folder_path, replacements):
    for root, dirs, files in os.walk(folder_path):
        for file_name in files:
            if file_name.endswith('.pas'):
                file_path = os.path.join(root, file_name)
                replace_in_file(file_path, replacements)
                remove_empty_lines_in_first_50_lines(file_path)
                remove_single_semicolon_lines(file_path)
                modify_last_comma_line(file_path)


# 执行替换操作
replace_in_folder(directory_path, replacements)