import pandas as pd
from openpyxl import load_workbook
import os

def append_to_template(products, output_path):
    """
    将产品数据追加写入到指定的 Excel 文件中。
    如果文件不存在，则以 '【进价】产品信息空表.xlsx' 为模板创建。
    """
    # 1. 确定模板路径 (只找这个特定文件名)
    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    template_path = os.path.join(base_dir, 'templates', '【进价】产品信息空表.xlsx')
    
    if not os.path.exists(template_path):
        raise FileNotFoundError(f"未找到核心模板文件: {template_path}")

    # 2. 如果目标输出文件已存在，则加载它；否则加载模板
    if os.path.exists(output_path):
        wb = load_workbook(output_path)
    else:
        # 确保输出目录存在
        os.makedirs(os.path.dirname(output_path), exist_ok=True)
        wb = load_workbook(template_path)
    
    ws = wb.active
    
    # 3. 寻找起始行 (跳过前两行标题和表头，从有数据的最后一行之后开始)
    # 假设 A 列(编码) 是必填的，用来判断行数
    last_row = 2
    for r in range(3, ws.max_row + 2):
        if ws.cell(row=r, column=1).value is None:
            last_row = r - 1
            break
    
    start_row = last_row + 1
    
    # 4. 写入本批次数据
    for i, product in enumerate(products):
        row = start_row + i
        # 编码按照总行数自增
        ws.cell(row=row, column=1, value=row - 2) 
        ws.cell(row=row, column=2, value=product.get('category', ''))
        ws.cell(row=row, column=3, value=product.get('brand', ''))
        ws.cell(row=row, column=4, value=product.get('name', ''))
        ws.cell(row=row, column=5, value=product.get('image', ''))
        ws.cell(row=row, column=6, value=product.get('color', ''))
        ws.cell(row=row, column=7, value=product.get('spec', ''))
        ws.cell(row=row, column=8, value=product.get('material', ''))
        ws.cell(row=row, column=9, value=product.get('price', ''))
        ws.cell(row=row, column=10, value=product.get('moq', ''))
        ws.cell(row=row, column=11, value=product.get('wholesale_price', ''))
        ws.cell(row=row, column=12, value=product.get('desc', ''))
        ws.cell(row=row, column=13, value=product.get('link', '')) # 已清洗的干净链接
        ws.cell(row=row, column=14, value=product.get('supplier', ''))

    wb.save(output_path)
    print(f"[*] 批次数据({len(products)}条)已写入: {output_path}")
