# app/modules/prospecting/models/scan_job.py
"""
Scan job tracking for batch enrichment operations.
"""

import enum

from sqlalchemy import Column, DateTime, Enum, Integer, String, Text

from app.core.database import Base
from models.database.base import TimestampMixin


class JobType(str, enum.Enum):
    IMPORT = "import"
    HTTP_CHECK = "http_check"
    TECH_SCAN = "tech_scan"
    PERFORMANCE_SCAN = "performance_scan"
    CONTACT_SCRAPE = "contact_scrape"
    SCORE_COMPUTE = "score_compute"
    FULL_ENRICHMENT = "full_enrichment"
    SECURITY_AUDIT = "security_audit"
    CONTENT_SCRAPE = "content_scrape"


class JobStatus(str, enum.Enum):
    PENDING = "pending"
    RUNNING = "running"
    COMPLETED = "completed"
    FAILED = "failed"
    CANCELLED = "cancelled"


class ProspectScanJob(Base, TimestampMixin):
    """Tracks batch scanning operations."""

    __tablename__ = "prospect_scan_jobs"

    id = Column(Integer, primary_key=True, index=True)
    job_type = Column(Enum(JobType), nullable=False)
    status = Column(Enum(JobStatus), nullable=False, default=JobStatus.PENDING)

    total_items = Column(Integer, nullable=False, default=0)
    processed_items = Column(Integer, nullable=False, default=0)
    failed_items = Column(Integer, nullable=False, default=0)
    skipped_items = Column(Integer, nullable=False, default=0)

    started_at = Column(DateTime, nullable=True)
    completed_at = Column(DateTime, nullable=True)

    config = Column(Text, nullable=True)  # JSON string
    result_summary = Column(Text, nullable=True)  # JSON string
    error_log = Column(Text, nullable=True)
    source_file = Column(String(500), nullable=True)

    celery_task_id = Column(String(255), nullable=True)

    @property
    def progress_percent(self) -> float:
        if self.total_items == 0:
            return 0.0
        return round(self.processed_items / self.total_items * 100, 1)
