from datetime import datetime

from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, Table, Text
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func

from src.core.models.base import Base

roles_permissions_map = Table(
    "roles_permissions",
    Base.metadata,
    Column("role_id", ForeignKey("roles.id", onupdate="CASCADE", ondelete="CASCADE")),
    Column(
        "permission_id",
        ForeignKey("permissions.id", onupdate="CASCADE", ondelete="CASCADE"),
    ),
)


class Role(Base):
    """
    Role Model: ORM class for Role Entity
    """

    __tablename__ = "roles"

    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    label = Column(Text)
    slug = Column(Text)
    is_default = Column(Boolean, default=False)
    created_at = Column(DateTime, server_default=func.now())

    permissions = relationship("Permission", secondary=roles_permissions_map)

    created_by_id = Column(Integer, ForeignKey("users.id"))
    created_by = relationship("Users", foreign_keys=[created_by_id], uselist=False)
