# /var/www/html/routes/course.py

from flask import Blueprint, render_template, request
from app.models.course import Course
from app.models.teacher import Teacher
from app.extensions import db

# 创建蓝图
course_bp = Blueprint('course', __name__, url_prefix='/course')


@course_bp.route('/')
def course_list():
    """
    课程列表页（支持筛选和分页）
    支持：类型、级别、类别、价格区间
    """
    page = request.args.get('page', 1, type=int)
    per_page = 12

    # 筛选条件
    course_type = request.args.get('type')           # online, offline, both
    level = request.args.get('level')                # Beginner, Intermediate, Advanced
    category = request.args.get('category')          # 口语、商务、考试等
    min_price = request.args.get('min_price', type=float)
    max_price = request.args.get('max_price', type=float)

    # 基础查询：只显示可用课程
    query = Course.query.filter_by(is_available=True)

    # 应用筛选
    if course_type:
        query = query.filter(Course.course_type.in_(['online', 'both']) if course_type == 'online'
                           else Course.course_type.in_(['offline', 'both']))
    
    if level:
        query = query.filter(Course.level == level)
    
    if category:
        query = query.filter(Course.category == category)
    
    if min_price is not None:
        query = query.filter(Course.price >= min_price)
    
    if max_price is not None:
        query = query.filter(Course.price <= max_price)

    # 分页查询
    courses = query.order_by(Course.total_enrollments.desc()).paginate(
        page=page, per_page=per_page, error_out=False
    )

    return render_template('course/list.html', courses=courses)


@course_bp.route('/<int:course_id>')
def course_detail(course_id):
    """
    课程详情页
    显示课程信息 + 相关课程推荐
    """
    course = Course.query.get_or_404(course_id)
    
    if not course.is_available:
        return render_template('course/unavailable.html'), 404

    # 推荐同老师的其他课程（最多4个）
    related_courses = Course.query.filter(
        Course.id != course_id,
        Course.teacher_id == course.teacher_id,
        Course.is_available == True
    ).limit(4).all()

    return render_template('course/detail.html',
                         course=course,
                         related_courses=related_courses)


@course_bp.route('/online')
def online_courses():
    """
    在线课程列表
    筛选 course_type 为 online 或 both 的课程
    """
    page = request.args.get('page', 1, type=int)
    per_page = 12

    courses = Course.query.filter(
        Course.is_available == True,
        Course.course_type.in_(['online', 'both'])
    ).order_by(Course.total_enrollments.desc()).paginate(
        page=page, per_page=per_page, error_out=False
    )

    return render_template('course/online.html', courses=courses)


@course_bp.route('/offline')
def offline_courses():
    """
    线下课程列表
    筛选 course_type 为 offline 或 both 的课程
    """
    page = request.args.get('page', 1, type=int)
    per_page = 12

    courses = Course.query.filter(
        Course.is_available == True,
        Course.course_type.in_(['offline', 'both'])
    ).order_by(Course.total_enrollments.desc()).paginate(
        page=page, per_page=per_page, error_out=False
    )

    return render_template('course/offline.html', courses=courses)