import logging

from langchain_core.tools import tool
from pydantic import BaseModel, Field

from agent.prompt_utils import read_tool_prompt
from common.starrocks_connection import get_db_connection

logger = logging.getLogger(__name__)

STORE_TABLE = "shared_source.chatbot_rsa_store_schedule_with_text_embedding"


class StoreSearchInput(BaseModel):
    location: str = Field(
        description="Tên quận/huyện/tỉnh/thành phố hoặc địa chỉ cụ thể mà khách hàng muốn tìm cửa hàng CANIFA. VD: 'Hoàng Mai', 'Cầu Giấy', 'Đà Nẵng', 'Vincom Bà Triệu'."
    )


@tool("canifa_store_search", args_schema=StoreSearchInput)
async def canifa_store_search(location: str) -> str:
    """
    Tìm kiếm cửa hàng CANIFA theo địa điểm/khu vực.
    Sử dụng khi khách hàng hỏi về cửa hàng tại một khu vực cụ thể.
    """
    logger.info(f"🏪 [Store Search] Location: {location}")
    try:
        sr = get_db_connection()

        # Clean location: bỏ prefix generic
        clean = location.lower().strip()
        for prefix in ["quận ", "huyện ", "tỉnh ", "thành phố ", "tp. ", "tp "]:
            clean = clean.replace(prefix, "")
        clean = clean.strip()

        if not clean:
            return "Vui lòng cho em biết khu vực bạn muốn tìm cửa hàng CANIFA (ví dụ: Hoàng Mai, Cầu Giấy, Đà Nẵng...)."

        # Search trên các cột structured: city, state, address, store_name
        sql = f"""
        SELECT store_name, address, city, state, phone_number,
               schedule_name, time_open_today, time_close_today
        FROM {STORE_TABLE}
        WHERE LOWER(city) LIKE '%{clean}%'
           OR LOWER(state) LIKE '%{clean}%'
           OR LOWER(address) LIKE '%{clean}%'
           OR LOWER(store_name) LIKE '%{clean}%'
        ORDER BY state, city, store_name
        LIMIT 20
        """

        results = await sr.execute_query_async(sql)
        logger.info(f"📊 Store search: {len(results)} stores found for '{location}'")

        if not results:
            return f"Không tìm thấy cửa hàng CANIFA tại khu vực '{location}'. Khách hàng có thể liên hệ hotline 1800 6061 để được hỗ trợ tìm cửa hàng gần nhất."

        # Format kết quả rõ ràng cho LLM
        lines = []
        for r in results:
            name = r.get("store_name", "")
            addr = r.get("address", "")
            city = r.get("city", "")
            state = r.get("state", "")
            phone = r.get("phone_number", "")
            schedule = r.get("schedule_name", "")
            t_open = r.get("time_open_today", "")
            t_close = r.get("time_close_today", "")

            store_info = f"🏪 {name}\n"
            store_info += f"   📍 Địa chỉ: {addr}"
            if city:
                store_info += f", {city}"
            if state:
                store_info += f", {state}"
            store_info += f"\n   📞 ĐT: {phone}"
            store_info += f"\n   🕐 Lịch: {schedule}"
            if t_open and t_close:
                store_info += f" (Hôm nay: {t_open}-{t_close})"
            lines.append(store_info)

        return f"Tìm thấy {len(results)} cửa hàng CANIFA tại khu vực '{location}':\n\n" + "\n\n".join(lines)

    except Exception as e:
        logger.error(f"❌ Error in canifa_store_search: {e}")
        return "Tôi đang gặp khó khăn khi tìm kiếm cửa hàng. Bạn có thể liên hệ hotline 1800 6061 để được hỗ trợ."


canifa_store_search.__doc__ = read_tool_prompt("store_search_tool") or canifa_store_search.__doc__
