import os
import uuid
from werkzeug.utils import secure_filename
from flask import current_app

def allowed_file(filename, allowed_extensions):
    """检查文件扩展名是否允许"""
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in allowed_extensions

def save_uploaded_file(file, folder, allowed_extensions=None):
    """保存上传的文件"""
    if allowed_extensions and not allowed_file(file.filename, allowed_extensions):
        return None
    
    # 生成安全的文件名
    filename = secure_filename(file.filename)
    # 添加随机前缀避免重名
    unique_filename = f"{uuid.uuid4().hex}_{filename}"
    
    # 确保目录存在
    upload_folder = os.path.join(current_app.config['UPLOAD_FOLDER'], folder)
    os.makedirs(upload_folder, exist_ok=True)
    
    # 保存文件
    file_path = os.path.join(upload_folder, unique_filename)
    file.save(file_path)
    
    return unique_filename

def save_avatar(file, user_id):
    """保存用户头像"""
    allowed_extensions = {'png', 'jpg', 'jpeg', 'gif'}
    return save_uploaded_file(file, 'avatars', allowed_extensions)

def save_certificate(file, teacher_id):
    """保存教师证书"""
    allowed_extensions = {'png', 'jpg', 'jpeg', 'pdf', 'doc', 'docx'}
    return save_uploaded_file(file, 'certificates', allowed_extensions)

def save_course_material(file, course_id):
    """保存课程资料"""
    allowed_extensions = {'pdf', 'doc', 'docx', 'ppt', 'pptx', 'txt'}
    return save_uploaded_file(file, 'materials', allowed_extensions)

def delete_file(filename, folder):
    """删除文件"""
    if filename and filename != 'default-avatar.png':
        file_path = os.path.join(current_app.config['UPLOAD_FOLDER'], folder, filename)
        if os.path.exists(file_path):
            os.remove(file_path)
            return True
    return False