"""
Excel文件处理工具
"""
import pandas as pd
from typing import List, Dict, Tuple
from pathlib import Path

def read_students_from_excel(file_path: str) -> List[Dict]:
    """
    从Excel文件读取学生信息
    
    期望的Excel格式：
    - 第一行：表头（学号、姓名、专业）
    - 后续行：学生数据
    
    返回：学生信息列表
    """
    try:
        df = pd.read_excel(file_path)
        
        # 标准化列名（支持多种可能的列名）
        column_mapping = {
            '学号': 'student_id',
            'student_id': 'student_id',
            'Student ID': 'student_id',
            '姓名': 'name',
            'name': 'name',
            'Name': 'name',
            '专业': 'major',
            'major': 'major',
            'Major': 'major'
        }
        
        # 重命名列
        df.columns = df.columns.str.strip()
        for old_name, new_name in column_mapping.items():
            if old_name in df.columns:
                df.rename(columns={old_name: new_name}, inplace=True)
        
        # 检查必需列
        if 'student_id' not in df.columns or 'name' not in df.columns:
            raise ValueError("Excel文件必须包含'学号'和'姓名'列")
        
        # 转换为字典列表
        students = []
        for _, row in df.iterrows():
            student = {
                'student_id': str(row['student_id']).strip(),
                'name': str(row['name']).strip(),
                'major': str(row.get('major', '')).strip() if 'major' in df.columns else ''
            }
            # 过滤空行
            if student['student_id'] and student['name']:
                students.append(student)
        
        return students
    
    except Exception as e:
        raise ValueError(f"读取Excel文件失败: {str(e)}")

def export_scores_to_excel(students_data: List[Dict], output_path: str) -> bool:
    """
    导出积分详单到Excel文件
    
    students_data: 包含学号、姓名、专业、随机点名次数、总积分的学生数据列表
    output_path: 输出文件路径
    """
    try:
        df = pd.DataFrame(students_data)
        
        # 确保列顺序
        columns_order = ['学号', '姓名', '专业', '随机点名次数', '总积分']
        df = df.reindex(columns=columns_order)
        
        # 导出到Excel
        df.to_excel(output_path, index=False, engine='openpyxl')
        return True
    
    except Exception as e:
        raise ValueError(f"导出Excel文件失败: {str(e)}")

def create_template_excel(output_path: str) -> bool:
    """
    创建Excel模板文件
    """
    try:
        template_data = {
            '学号': ['2021001', '2021002', '2021003'],
            '姓名': ['张三', '李四', '王五'],
            '专业': ['软件工程', '计算机科学', '数据科学']
        }
        df = pd.DataFrame(template_data)
        df.to_excel(output_path, index=False, engine='openpyxl')
        return True
    except Exception as e:
        raise ValueError(f"创建模板文件失败: {str(e)}")

