from extensions import db
from datetime import datetime

class Booking(db.Model):
    __tablename__ = 'bookings'
    
    id = db.Column(db.Integer, primary_key=True)
    student_id = db.Column(db.Integer, db.ForeignKey('students.id'), nullable=False)
    teacher_id = db.Column(db.Integer, db.ForeignKey('teachers.id'), nullable=False)
    course_id = db.Column(db.Integer, db.ForeignKey('courses.id'), nullable=False)
    
    # 预约信息
    booking_time = db.Column(db.DateTime, nullable=False)
    duration = db.Column(db.Integer, nullable=False, default=60)  # 时长（分钟）
    lesson_type = db.Column(db.Enum('online', 'offline'), nullable=False)
    meeting_link = db.Column(db.String(500))  # 在线会议链接
    location = db.Column(db.String(500))  # 线下授课地点
    
    # 状态
    status = db.Column(db.Enum('pending', 'confirmed', 'completed', 'cancelled', 'no_show'), default='pending')
    
    # 支付信息
    total_amount = db.Column(db.Numeric(10, 2), nullable=False)
    payment_status = db.Column(db.Enum('pending', 'paid', 'refunded'), default='pending')
    
    # 课程记录
    notes = db.Column(db.Text)  # 学生备注
    teacher_notes = db.Column(db.Text)  # 老师备注
    student_feedback = db.Column(db.Text)  # 学生课后反馈
    teacher_feedback = db.Column(db.Text)  # 老师课后反馈
    
    # 时间戳
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    
    # 关系
    payment = db.relationship('Payment', backref='booking', uselist=False)
    
    @property
    def is_upcoming(self):
        """是否即将开始的课程"""
        return self.booking_time > datetime.utcnow() and self.status in ['confirmed', 'pending']
    
    @property
    def is_completed(self):
        """是否已完成的课程"""
        return self.status == 'completed'
    
    def __repr__(self):
        return f'<Booking {self.id} - {self.student.full_name} with {self.teacher.full_name}>'