from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Boolean, BigInteger
from sqlalchemy.orm import relationship
from datetime import datetime, timezone
from src.utils.db import Base
from src.marketing.apps.post.model import CalendarPostType



class ConnectedAccount(Base):
    __tablename__ = "connected_accounts"

    id = Column(Integer, primary_key=True, index=True)
    master_account_id = Column(Integer, ForeignKey("master_accounts.id"), nullable=False)
    store_id = Column(Integer)
    branch_id = Column(Integer)
    user_id = Column(Integer)
    token = Column(String)
    external_account_id = Column(String, nullable=True)
    external_account_name = Column(String, nullable=True)   
    permission = Column(String)
    expires_at = Column(BigInteger, nullable=True)
    created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
    updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
    is_deleted = Column(Boolean, default=False)
    master_account = relationship("MasterAccount", back_populates="connected_accounts")
    post_types = relationship(
        "CalendarPostType",
        back_populates="connected_account",
        foreign_keys=[CalendarPostType.connected_account_id]
    )





class MasterAccount(Base):
    __tablename__ = "master_accounts"
    
    id = Column(Integer, primary_key=True, index=True)
    social_media_name = Column(String, nullable=False, unique=True)
    icon_image = Column(String)
    account_type = Column(String, nullable=False)
    created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
    updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
    is_deleted = Column(Boolean, default=False)
    post_types = relationship("PostTypeConfig", back_populates="master_account")
    connected_accounts = relationship("ConnectedAccount", back_populates="master_account")
