import uuid
from sqlalchemy import Column, String, DateTime, Date, ForeignKey, Enum as SqlEnum
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import relationship
from utils.utils import Base, utc_now, ReportType, ReportStatus


class Report(Base):
    __tablename__ = "reports"

    id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
    report_name = Column(String(200), nullable=False)
    report_type = Column(SqlEnum(ReportType, name="reporttype_enum"), nullable=False)
    generated_by_user_id = Column(String(36), ForeignKey("users.id", ondelete="RESTRICT"), nullable=False, index=True)
    start_date = Column(Date, nullable=True)
    end_date = Column(Date, nullable=True)
    parameters = Column(JSONB, nullable=True, default=dict)
    file_path = Column(String(500), nullable=True)
    status = Column(SqlEnum(ReportStatus, name="reportstatus_enum"), nullable=False)
    generated_at = Column(DateTime(timezone=True), nullable=True)
    created_at = Column(DateTime(timezone=True), default=utc_now, nullable=False)
    updated_at = Column(DateTime(timezone=True), default=utc_now, onupdate=utc_now, nullable=False)

    generated_by = relationship("User", back_populates="reports_generated")