from sqlalchemy import Column, Integer, ForeignKey, DateTime
from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.sql import func
from app.core.database.table import Base
from app.core.database.models.Target import Target
from app.core.database.models.NotificationChannel import NotificationChannel
#from app.core.database.models.User import User
from sqlalchemy.orm import foreign
from typing import List
from app.core.database.ModelsBase import Base

class UserTargetChannel(Base):  # type: ignore
    __tablename__ = "user_target_channel"
    __table_args__ = {'schema': 'base'}
    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    user_id: Mapped[int] = mapped_column(ForeignKey("security.users.id"), nullable=False)
    target_id: Mapped[int] = mapped_column(ForeignKey("base.targets.id"), nullable=False)
    channel_id: Mapped[int] = mapped_column(ForeignKey("base.notification_chanels.id"), nullable=False)
    notification_frequency_minutes: Mapped[int] = mapped_column(nullable=False)
    created_at: Mapped[DateTime] = mapped_column(DateTime(timezone=True), server_default=func.now())
    # Relaciones
    #user = relationship("User", back_populates="subscriptions")
    #target = relationship(Target, back_populates="user_target_channels",primaryjoin="target.id == UserTargetChannel.target_id")
    #channel = relationship(NotificationChannel)
    #target = relationship(
    #    Target, 
     #   back_populates="user_target_channels",
      #  primaryjoin=Target.id == foreign(target_id)
    #)
   # channel = relationship(
    #NotificationChannel,
   # back_populates="user_target_channels",
    #primaryjoin=NotificationChannel.id == channel_id
    #)
    

    """
    UserTargetChannel = Table(
    'user_target_channel',
    Base.metadata,
    Column('id', Integer, ForeignKey('base.notification_chanels.id'), primary_key=True),
    Column('user_id', Integer, ForeignKey('security.users.id')),
    Column('target_id', Integer, ForeignKey('base.targets.id')),
    Column('notification_channel_id', Integer, ForeignKey('base.notification_chanels.id')),
    schema='base'
)
    """

