
from sqlalchemy import Column, DateTime, Enum as SQLEnum, String, Text, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from datetime import datetime, timezone
from enum import Enum
import uuid
from utils.db_connect import BaseModelForTable


class JobStatus(str, Enum):
    IN_PROGRESS = "IN_PROGRESS"
    CREATED = "CREATED"
    ABORTED = "ABORTED"
    REJECTED = "REJECTED"
    COMPLETED = "COMPLETED"


class JobService(BaseModelForTable):
    __tablename__ = "job_service"

    status = Column(
        SQLEnum(JobStatus),
        nullable=False,
        default=JobStatus.CREATED
    )

    job_name = Column(String, nullable=False)
    
    created_by=Column(UUID(as_uuid=True),
        ForeignKey("users.id"),
        nullable=False
    )
    
    project_id = Column(UUID(as_uuid=True),
        ForeignKey("projects.id", ondelete="CASCADE"),
        nullable=False
    )

    message = Column(Text, nullable=True)
    error_message = Column(Text, nullable=True)
    report_url = Column(String, nullable=True)


    #relationship
    reporter = relationship(
        "User",
        foreign_keys=[created_by],
        back_populates="job_creator"
    )