from extensions import db
from datetime import datetime
from sqlalchemy import event

class Teacher(db.Model):
    __tablename__ = 'teachers'
    
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    
    # 基本信息
    full_name = db.Column(db.String(100), nullable=False)
    nationality = db.Column(db.String(50))
    bio = db.Column(db.Text)
    teaching_style = db.Column(db.Text)
    
    # 教学资质
    experience = db.Column(db.Integer)  # 教学经验（年）
    education = db.Column(db.String(200))  # 学历
    certification = db.Column(db.String(200))  # 教学证书
    specialty = db.Column(db.String(200))  # 教学专长
    
    # 服务信息
    hourly_rate = db.Column(db.Numeric(10, 2), nullable=False, default=100)
    available_online = db.Column(db.Boolean, default=True)
    available_offline = db.Column(db.Boolean, default=False)
    offline_locations = db.Column(db.String(500))  # 可授课地区
    
    # 媒体文件
    avatar = db.Column(db.String(255), default='default-teacher.png')
    intro_video = db.Column(db.String(255))  # 自我介绍视频
    certificate_files = db.Column(db.Text)  # 证书文件路径，JSON格式
    
    # 状态
    is_verified = db.Column(db.Boolean, default=False)
    is_featured = db.Column(db.Boolean, default=False)
    rating = db.Column(db.Numeric(3, 2), default=0.0)  # 平均评分
    total_reviews = db.Column(db.Integer, default=0)
    
    # 时间戳
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow)  # ✅ 去掉 onupdate

    # 关系
    courses = db.relationship('Course', backref='teacher', lazy='dynamic')
    bookings = db.relationship('Booking', backref='teacher', lazy='dynamic')
    feedbacks = db.relationship('Feedback', backref='teacher', lazy='dynamic')
    
    def update_rating(self):
        """更新老师评分"""
        from sqlalchemy import func
        result = db.session.query(func.avg(Feedback.rating)).filter(
            Feedback.teacher_id == self.id
        ).scalar()
        self.rating = result or 0.0
        self.total_reviews = Feedback.query.filter_by(teacher_id=self.id).count()
        db.session.commit()
    
    def __repr__(self):
        return f'<Teacher {self.full_name}>'

# ✅ 添加事件监听器：自动更新 updated_at
@event.listens_for(Teacher, 'before_update')
def receive_before_update(mapper, connection, target):
    target.updated_at = datetime.utcnow()