from sqlalchemy import Column, Integer, String, DateTime, ForeignKey,Time,Date, Boolean
from sqlalchemy.orm import relationship
from datetime import datetime
from src.utils.db import Base




class CalendarPostType(Base):
    __tablename__ = "calendar_post_types"

    id = Column(Integer, primary_key=True, index=True)
    store_id = Column(Integer)
    branch_id = Column(Integer)
    user_id = Column(Integer)
    calendar_id = Column(Integer, ForeignKey("calendar.id"), nullable=True)
    calendar_post_id = Column(Integer, ForeignKey("calendar_posts.id"))
    connected_account_id = Column(Integer, ForeignKey("connected_accounts.id"), nullable=True)
    external_post_id = Column(String, nullable=True)  # For storing external post IDs
    post_type = Column(String)
    content = Column(String)
    link = Column(String)
    is_instant_post = Column(Boolean, default=False)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    calendar_post = relationship("CalendarPost", back_populates="post_types")
    is_deleted = Column(Boolean, default=False)
    images = relationship("PostImage", back_populates="calendar_post_type", foreign_keys="[PostImage.post_type_id]")
    connected_account = relationship(
        "ConnectedAccount",
        back_populates="post_types",
        foreign_keys=[connected_account_id]
    )
   






class CalendarPost(Base):
    __tablename__ = "calendar_posts"

    id = Column(Integer, primary_key=True, index=True)
    store_id = Column(Integer)
    branch_id = Column(Integer)
    user_id = Column(Integer)
    calendar_id = Column(Integer, ForeignKey("calendar.id"), nullable=True)
    title = Column(String, nullable=False)
    schedule_date = Column(Date, nullable=False)
    schedule_time = Column(Time)
    post_status = Column(String)
    tags = Column(String)
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    calendar = relationship("Calendar", back_populates="posts")
    post_types = relationship("CalendarPostType", back_populates="calendar_post")
    is_deleted = Column(Boolean, default=False)
    





'''
file src/marketing/apps/post/model.py
Social Media Post Type Configuration Table
This table defines the specifications for different post types across various social media platforms.
'''
class PostTypeConfig(Base):
    __tablename__ = "post_type_config"

    id = Column(Integer, primary_key=True, index=True)
    master_account_id = Column(Integer, ForeignKey("master_accounts.id"), nullable=False)
    platform = Column(String, nullable=False)  
    post_type = Column(String, nullable=False)  

    supports_text = Column(Boolean, default=False)
    supports_image = Column(Boolean, default=False)
    supports_multiple_images = Column(Boolean, default=False)
    supports_video = Column(Boolean, default=False)
    supports_link = Column(Boolean, default=False)

    text_max_limit = Column(Integer, default=0)
    text_optimum_limit = Column(Integer, default=0)
    image_ratio = Column(String)
    image_best_resolution_px = Column(String)
    video_max_size_mb = Column(Integer, default=0)
    video_max_length_sec = Column(Integer, default=0)
    additional_notes = Column(String)
    master_account = relationship("MasterAccount", back_populates="post_types")


#Create post image table
class PostImage(Base):
    __tablename__ = "post_images"

    id = Column(Integer, primary_key=True, index=True)
    post_id = Column(Integer, ForeignKey("calendar_posts.id"), nullable=True)
    post_type_id = Column(Integer, ForeignKey("calendar_post_types.id"), nullable=True)
    image_url = Column(String, nullable=False)
    image_name = Column(String, nullable=True)
    created_at = Column(DateTime, default=datetime.utcnow)
    is_deleted = Column(Boolean, default=False)

    calendar_post_type = relationship("CalendarPostType", back_populates="images", foreign_keys=[post_type_id])


