import pandas as pd
from datetime import datetime
import os

# 配置参数
CONFIG = {
    'input_csv': r'C:\Users\Administrator\Desktop\European Local O&M\all-active-0519.csv.csv',
    'output_dir': './reports',
    'required_columns': ['car_vins', 'active_status', 'MATERIAL', 'Area']
}


def validate_data(df):
    """校验数据完整性"""
    missing_cols = [col for col in CONFIG['required_columns'] if col not in df.columns]
    if missing_cols:
        raise ValueError(f"CSV文件中缺少必要字段: {','.join(missing_cols)}")


def generate_report():
    now = datetime.now()
    today_str = now.strftime("%Y-%m-%d %H:%M:%S")
    filename_date = now.strftime("%Y-%m-%d")

    try:
        print(f"\n📅 当前时间：{today_str}")
        print("正在读取原始数据...")
        df = pd.read_csv(CONFIG['input_csv'], encoding='utf-8-sig')

        print("校验数据结构...")
        validate_data(df)

        # 拆分激活与未激活
        active_df = df[df['active_status'] == 'active'].copy()
        inactive_df = df[df['active_status'] != 'active'].copy()

        print(f"✅ 已激活车辆总数：{len(active_df)}")
        print(f"❗ 未激活车辆总数：{len(inactive_df)}")

        if inactive_df.empty:
            print("⚠️ 所有车辆均为激活状态，无需生成未激活清单")
        else:
            # 处理未激活车辆数据
            inactive_df.insert(0, 'ReportDate', filename_date)
            inactive_df.fillna({'Area': '未分配', 'MATERIAL': '未知物料'}, inplace=True)

            # 保存未激活车辆清单
            os.makedirs(CONFIG['output_dir'], exist_ok=True)
            output_path = f"{CONFIG['output_dir']}/Inactive_Vehicles_{filename_date}.xlsx"
            with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
                inactive_df.to_excel(writer, index=False, sheet_name='InactiveVehicles')
            print(f"\n📁 未激活车辆清单已生成：{os.path.abspath(output_path)}")

        if active_df.empty:
            print("⚠️ 无激活车辆，跳过分析")
            return

        # 分析激活车辆数据
        active_df.fillna({'Area': '未分配', 'MATERIAL': '未知物料'}, inplace=True)

        area_summary = (
            active_df.groupby('Area')['car_vins']
            .count()
            .reset_index()
            .rename(columns={'car_vins': 'ActiveCount'})
            .sort_values(by='ActiveCount', ascending=False)
        )

        material_summary = (
            active_df.groupby('MATERIAL')['car_vins']
            .count()
            .reset_index()
            .rename(columns={'car_vins': 'ActiveCount'})
            .sort_values(by='ActiveCount', ascending=False)
        )

        # 控制台输出分析结果
        print("\n📊 区域分布统计（已激活车辆）：")
        print(area_summary.to_string(index=False))

        print("\n📦 销量前10的物料号（已激活车辆）：")
        top10_materials = material_summary.head(10)
        print(top10_materials.to_string(index=False))

    except FileNotFoundError:
        print(f"❌ 错误：未找到输入文件 {CONFIG['input_csv']}")
    except Exception as e:
        print(f"❌ 发生异常：{str(e)}")


if __name__ == "__main__":
    print("\n===== 奇瑞车辆日报生成器 =====")
    input("请将最新csv放入daily_data文件夹后按回车键开始...")

    generate_report()

    input("\n处理完成！按任意键退出...")
