"""Company career portal (self-portal) provider.

Publishing here is internal — the JD is already in our database, so posting
just makes it visible on the public careers page and returns its URL.
"""

import logging

from apps.jobs.tracking_tokens import build_application_url

from .base import JobBoardIntegration, PostResult

logger = logging.getLogger(__name__)


class CareerPortalIntegration(JobBoardIntegration):
    channel = "CAREER_PORTAL"

    REQUIRED_FIELDS = ("title", "location", "work_details")

    def post_job(self, job) -> PostResult:
        self.validate(job, self.REQUIRED_FIELDS)
        logger.info("CareerPortal: publishing JD %s (%s)", job.id, job.title)
        return PostResult(
            external_post_id=f"portal-{job.id}",
            # Opaque encrypted tracking token instead of `?source=direct`.
            external_url=build_application_url(job, self.channel),
        )

    def update_job(self, job) -> PostResult:
        return self.post_job(job)

    def delete_job(self, job) -> None:
        logger.info("CareerPortal: unpublishing JD %s", job.id)
