﻿DELIMITER $$

CREATE PROCEDURE `sp_search_users_for_autocomplete_paged`(
    IN p_search_term VARCHAR(255),
    IN p_page_num INT,
    IN p_page_size INT,
    IN p_total_count_limit INT -- FOUND_ROWS() 계산 시 과도한 스캔 방지용 (선택적)
)
BEGIN
    DECLARE v_offset INT;

    IF p_page_num IS NULL OR p_page_num < 1 THEN SET p_page_num = 1; END IF;
    IF p_page_size IS NULL OR p_page_size < 1 THEN SET p_page_size = 10; END IF;
    SET v_offset = (p_page_num - 1) * p_page_size;

    -- 실제 데이터 조회 (페이지네이션 적용)
    SELECT SQL_CALC_FOUND_ROWS DISTINCT -- DISTINCT 유지, SQL_CALC_FOUND_ROWS 추가
        user_id,
        CASE
            WHEN display_name IS NOT NULL AND display_name != '' AND account_name IS NOT NULL THEN CONCAT(display_name, ' [', account_name, ']')
            WHEN display_name IS NOT NULL AND display_name != '' THEN display_name
            ELSE account_name
        END AS user_display_name
    FROM user_info
    WHERE
        (p_search_term IS NULL OR p_search_term = '' OR
         LOWER(display_name) LIKE CONCAT('%', LOWER(p_search_term), '%') OR
         LOWER(account_name) LIKE CONCAT('%', LOWER(p_search_term), '%'))
    ORDER BY user_display_name
    LIMIT v_offset, p_page_size; -- OFFSET, LIMIT 순서 주의

    -- 전체 결과 수 조회 (LIMIT 절에 의해 영향받지 않음)
    -- p_total_count_limit 값은 이 SELECT 문의 LIMIT 과는 별개로,
    -- FOUND_ROWS()가 너무 큰 테이블 전체를 스캔하는 것을 방지하기 위한 최적화 기법으로 사용될 수 있으나,
    -- MySQL/MariaDB 에서 FOUND_ROWS()는 이전 SELECT 문의 LIMIT을 무시하고 실제 필터링된 전체 행 수를 계산합니다.
    -- 따라서 p_total_count_limit 파라미터는 여기서는 직접적인 용도가 없을 수 있습니다.
    -- 만약 필요하다면, 별도의 COUNT(*) 쿼리를 조건부로 실행하는 등의 로직을 추가할 수 있습니다.
    SELECT FOUND_ROWS() AS total_count;

END
$$

DELIMITER ;