# -*- coding: utf-8 -*-


MIN_ORIGINAL_IMAGES = 3
MAX_EXTRA_IMAGES = 5


def count_original_content_images(images):
    count = 0

    for img in images or []:
        category = str(img.get("image_category") or "").lower()
        url = (
            img.get("public_url")
            or img.get("local_path")
            or img.get("image_url")
            or ""
        )

        if not url:
            continue

        if category == "realtor":
            continue

        count += 1

    return count


def fetch_approved_extra_images(conn, realtor_id=None, article_no=None, limit=MAX_EXTRA_IMAGES):
    sql = """
        SELECT
            id,
            realtor_id,
            article_no,
            image_title,
            image_caption,
            image_source,
            local_path,
            public_url,
            original_url,
            sort_order,

            'extra' AS image_category

        FROM blog_article_extra_images

        WHERE is_approved = 1
    """

    params = []

    if article_no:
        sql += " AND (article_no = %s OR article_no IS NULL OR article_no = '') "
        params.append(str(article_no))

    if realtor_id:
        sql += " AND (realtor_id = %s OR realtor_id IS NULL OR realtor_id = 0) "
        params.append(int(realtor_id))

    sql += """
        ORDER BY
            CASE WHEN article_no = %s THEN 0 ELSE 1 END,
            CASE WHEN realtor_id = %s THEN 0 ELSE 1 END,
            sort_order ASC,
            id ASC
        LIMIT %s
    """

    params.extend([
        str(article_no or ""),
        int(realtor_id or 0),
        int(limit),
    ])

    with conn.cursor() as cur:
        cur.execute(sql, params)
        return cur.fetchall()


def get_extra_images_if_needed(conn, realtor_id, article_no, images):
    """
    원본 이미지가 3장 미만이면 승인된 보조 이미지를 추가로 반환.
    원본 이미지가 3장 이상이면 빈 배열 반환.
    """

    original_count = count_original_content_images(images)

    if original_count >= MIN_ORIGINAL_IMAGES:
        return []

    need_count = MAX_EXTRA_IMAGES

    extra_images = fetch_approved_extra_images(
        conn=conn,
        realtor_id=realtor_id,
        article_no=article_no,
        limit=need_count,
    )

    return extra_images