# -*- coding: utf-8 -*-
"""
V2-017 ExposureSearchPolicy

역할:
- 네이버 검색 노출 체크 대상 여부를 판단한다.
- 비공개 테스트 발행은 노출 체크에서 제외한다.
- 행복공인(realtor_id=1)은 현재 비공개 테스트 기준으로 skipped 처리한다.

향후:
- DB 설정값으로 realtor별 exposure_check_enabled를 관리할 수 있다.
"""


class ExposureSearchPolicy:
    """
    V2 노출 체크 정책.

    현재 기준:
    - realtor_id=1 행복공인: 비공개 테스트 운영이므로 검색 노출 체크 skipped
    - 그 외: 기본 체크 대상
    """

    PRIVATE_TEST_REALTOR_IDS = {1}

    def should_check(self, realtor_id=None, publish_status=None, blog_url=None, meta=None) -> dict:
        realtor_id = int(realtor_id or 0)
        meta = meta or {}

        if realtor_id in self.PRIVATE_TEST_REALTOR_IDS:
            return {
                "check": False,
                "search_status": "skipped",
                "reason": "private_test_realtor",
                "message": "비공개 테스트 중개사이므로 네이버 검색 노출 체크를 제외합니다.",
            }

        if str(publish_status or "").lower() in {"private", "private_test", "draft_private"}:
            return {
                "check": False,
                "search_status": "skipped",
                "reason": "private_publish_status",
                "message": "비공개 발행 상태이므로 네이버 검색 노출 체크를 제외합니다.",
            }

        if not blog_url:
            return {
                "check": False,
                "search_status": "skipped",
                "reason": "missing_blog_url",
                "message": "blog_url이 없어 네이버 검색 노출 체크를 제외합니다.",
            }

        return {
            "check": True,
            "search_status": "pending",
            "reason": "public_publish",
            "message": "공개 발행 기준 노출 체크 대상입니다.",
        }
