from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey
from datetime import datetime
from .database import Base
from sqlalchemy.orm import relationship

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    student_id = Column(Integer, ForeignKey("students.id"), index=True)
    parent_id = Column(Integer, index=True)
    name = Column(String(255), index=True)
    mobile = Column(String(15), index=True)
    email =  Column(String(125), index=True)
    user_type = Column(Integer)
    status_id = Column(Integer)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow)

    # Relationships
    student = relationship("Student", primaryjoin="User.student_id==Student.id", uselist=False)
    # parent = relationship("Parent", primaryjoin="User.parent_id==Parent.id", uselist=False)  # if Parent model exists

class Student(Base):
    __tablename__ = "students"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(125), index=True)
    gender = Column(Integer, index=True)
    email = Column(String(125), index=True)
    mobile = Column(String(15), index=True)
    profile_picture =  Column(String(255), index=True)
    dob = Column(String(125))
    location = Column(Integer)
    school_address = Column(String(255), index=True)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow)

class OTP(Base):
    __tablename__ = "otp"
    id = Column(Integer, primary_key=True, index=True)
    mobile = Column(String(15), index=True)  # <- Change this from phone to mobile
    otp = Column(String(6))
    created_at = Column(DateTime, default=datetime.utcnow)

class Chat(Base):
    __tablename__ = "chats"
    id = Column(Integer, primary_key=True, index=True)
    user_id = Column(Integer, ForeignKey("users.id"))
    user_message = Column(String)
    bot_reply = Column(String)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow)

class Avatar(Base):
    __tablename__ = "avatar"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(200), index=True)
    image = Column(String(200), index=True)
    glb = Column(String(200), index=True)
    gender = Column(String(200), index=True)

class UserAssignedAvatar(Base):
    __tablename__ = "user_assigned_avatar"
    id = Column(Integer, primary_key=True, index=True)
    avatar_id = Column(Integer, ForeignKey("avatar.id"))
    avatar_name = Column(String(125))
    user_id = Column(Integer, ForeignKey("users.id"))

class BlacklistedToken(Base):
    __tablename__ = "blacklisted_tokens"
    id = Column(Integer, primary_key=True, index=True)
    token = Column(String(512), unique=True, index=True)
    blacklisted_at = Column(DateTime, default=datetime.utcnow)

class Permission(Base):
    __tablename__ = "permissions"
    id = Column(Integer, primary_key=True)
    name = Column(String(100), unique=True)  # e.g., 'view-dashboard'
    display_name = Column(String(255))
    status = Column(Integer)

class UserPermission(Base):
    __tablename__ = "user_permission"
    user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
    permission_id = Column(Integer, ForeignKey("permissions.id"), primary_key=True)
