from content_tools import add_picture_to_table, search_and_replace
from get_pictures import resize_and_reduce_quality
from document_tools import add_table_to_document

def fill_tables(Y_table_list, row, col, Y_Table_num, Y):
    """根据前端返回json块填写表格list，并实时跟进已填写表格数量
    目前只支持固定的缺陷图的填写
    
    Args:
        Y_table_list (list): 前端返回的json块
        row (int): 表格行数
        col (int): 表格列数
        Y_Table_num: json块中有几个表格
        Xu_Hao: 是第几个json块
        Y: 其他参数
        
    Return:
        Y1_TABLES: 三维，表和对应元素
        table_index_to_images: 字典，表索引到图片路径列表的映射
        Xu_Hao：到达第几个表了
    """
    table_index_to_images = {}
    Y_TABLES = [[["" for _ in range(row)] for _ in range(col)] for _ in range(Y_Table_num)]
    
    # 处理前端返回数据
    for l, table_dict in enumerate(Y_table_list):
        if table_dict:
            Y_TABLES[l][1][0] = Y
            Y_TABLES[l][1][1] = table_dict["QueXianLeiXing"]
            Y_TABLES[l][1][2] = table_dict["QueXianWeiZhi"]
            Y_TABLES[l][1][3] = table_dict["QueXianChiCun"]
            Y_TABLES[l][3][0] = table_dict["WeiZongDengJi"]
            Y_TABLES[l][3][1] = table_dict["visibility"]
            Y_TABLES[l][3][2] = table_dict["urgency"]
            Y_TABLES[l][3][3] = table_dict["repair_suggestion"]
        
        # 获取图片路径
        image_path = table_dict['Tupian_Dir']
        if image_path:
            # 确保路径是字符串形式
            if isinstance(image_path, list):
                table_index_to_images[l] = image_path.copy()
            else:
                table_index_to_images[l] = [str(image_path)]
    
    return Y_TABLES, table_index_to_images

async def process_images_table(data_dict, output_dir, start_i, JIANCHA_NEIRONG_PICTURES_TABLE, key_words = None):
    """添加对应表格且填写图片名与插入图片

    Args:
        data_dict (dict): dict内容，图片:图片路径
        output_dir (str): 输出路径
        start_i (int): 总表格数量
        JIANCHA_NEIRONG_PICTURES_TABLE (str): 二维表模板路径

    Returns:
        int: 最后使用的表格序号
    """
    items = list(data_dict.items())
    picture_num = len(items)
    line_index = 0
    picture_index = 0
    i = start_i

    for content_row in range(((picture_num + 2) // 3) * 2):
        if content_row % 2 == 1:
            # 文字行（从 items 取图片名）
            JIANCHA_NEIRONG_TEXT = [["" for _ in range(3)] for _ in range(1)]  # 1行3列
            for k in range(1):  # 只有1行
                for l in range(3):
                    if line_index >= picture_num:
                        break
                    JIANCHA_NEIRONG_TEXT[k][l] = items[line_index][0]  # 图片名
                    print(f'当前为文字表格，在({k},{l})位置插入文字: {items[line_index][0]}')
                    line_index += 1
            print(f"当前待插入表格: {JIANCHA_NEIRONG_TEXT}")
            print(f"当前表格序号为 {i}")
            output_doc, message = await add_table_to_document(
                output_dir, JIANCHA_NEIRONG_PICTURES_TABLE, 1, 3, i, JIANCHA_NEIRONG_TEXT, False, None, key_words
            )
            i += 1
        else:
            # 图片行（从 items 取图片路径）
            print(f"当前表格序号为 {i}")
            output_doc, message = await add_table_to_document(
                output_dir, JIANCHA_NEIRONG_PICTURES_TABLE, 1, 3, i, None, False
            )
            for k in range(3):
                if picture_index < picture_num:
                    pic_path = items[picture_index][1]  # 图片路径
                    print(f"当前为图片表格，在(0,{k})位置插入图片: {pic_path}")
                    print(await add_picture_to_table(output_doc, output_dir, 0, k, pic_path, i, 1.8898))
                    picture_index += 1
            i += 1
        print(message)
    return i  # 返回最后使用的表格序号

async def add_dynamic_table(output_doc, output_dir, table_num, TABLES, JIANCHA_XIANGQING_DIR, PICTURES, row, col, i, FLAG, xuhao):
    """创建动态表
    
    Args:
        output_doc (Document): 文档对象
        output_dir (str): 输出目录
        table_num (int): 表格序号
        TABLES (list): 表格数据
        JIANCHA_XIANGQING_DIR (str): 检查详情表目录
        PICTURES (dict): 图片数据字典，键为表索引，值为图片路径列表
        row (int): 行数
        col (int): 列数
        i (int): 表格序号
        FLAG: 其他标志
        
    Returns:
        tuple: (i, table_num) 更新后的表格序号和表格数量
    """
    for table_idx, Table in enumerate(TABLES):
        print(Table)
        output_doc, message = await add_table_to_document(output_dir, JIANCHA_XIANGQING_DIR, row, col, i, Table, FLAG)
        print(message)
        
        # 获取当前表格对应的图片
        current_table_pictures = PICTURES.get(table_idx, [])
        print(f"开始处理图片列表: {current_table_pictures}")
        
        for picturedir in current_table_pictures:
            try:
                print(f"添加 {picturedir} {type(picturedir)}到表格{table_idx}")
                resize_and_reduce_quality(picturedir, picturedir)
                await add_picture_to_table(output_doc, output_dir, 4, 0, picturedir, i, 4.7232)
            except Exception as e:
                print(f"添加图片失败:{e}")
        
        print(await search_and_replace(output_dir, 'tupian_xuhao', f'{xuhao}'))
        table_num += 1
        i += 1
        xuhao += 1
    return i, table_num, xuhao

def get_year_month(date):
    """根据格式化date字符串获取年月 'date': '二〇二一年十二月十日 9:00'

    Args: date (str): 日期字符串

    Returns: 年月字符串 '二〇二一年十二月'
    """
    unit_map = {'1' : '一', '2' : '二', '3' : '三', '4' : '四', '5' : '五', '6' : '六', '7' : '七', '8' : '八', '9' : '九', '0' : '〇'}
    unit_map_month = {1 : '一', 2 : '二', 3 : '三', 4 : '四', 5 : '五', 6 : '六', 7 : '七', 8 : '八', 9 : '九', 10 : '十', 11 : '十一', 12 : '十二'}
    year = date.split('年')[0]
    month = date.split('年')[1].split('月')[0]
    year = ''.join([unit_map[i] for i in year])
    month = unit_map_month[int(month)]
    return f"{year}年{month}月"

def merge_info(frontend_info, default_info):
    """
    合并前端传入的 info 和默认 info
    规则：如果前端传入的值为空（None 或空字符串），则使用默认值
    
    Args:
        frontend_info: 前端传入的字典
        default_info: 默认的完整字典
    Returns: 
        合并后的完整字典
    """
    if not isinstance(frontend_info, dict) or frontend_info is None:
        return default_info.copy()

    merged_info = {}
    
    for key, default_value in default_info.items():
        # 获取前端传入的值
        frontend_value = frontend_info.get(key)
        
        # 判断前端值是否为空（None 或空字符串）
        if frontend_value is None or frontend_value == "":
            merged_info[key] = default_value
        else:
            merged_info[key] = frontend_value
    
    return merged_info

