from fastapi import Depends, APIRouter, status, Query, Path, HTTPException,Request
from internal.models import *
from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists,raise_if_not_found
from dependencies import get_current_active_user
from limiter_config import limiter
router = APIRouter(
    prefix="/bloglabels",
    tags=['博客标签']
)
# 获取列表
@router.get("/list")
@limiter.limit("10/minute")
async def label_list(request: Request,):
    select_query = "SELECT id,labelname,descr FROM labels;"
    label_list = fetch_all(select_query)
    return response_success(label_list, "label get list success")

# 新增
@router.post("/add")  
@limiter.limit("10/minute")
async def label_add(request: Request,label:Label,_: User = Depends(get_current_active_user)):
    insert_query="""INSERT INTO labels (labelname,descr) VALUES(%s,%s)"""
    insert_value=(label.labelname,label.descr)
    execute_query(insert_query,insert_value)
    return response_success(data=label,message="label create success")

# 测试一下

# 单条数据查询
@router.get("/list/search")
@limiter.limit("10/minute")
async def label_search(request: Request,labelname:str=Query(description="标签名称")):
    select_query="SELECT id,labelname,descr FROM labels WHERE 1=1 "
    params=[]
    if labelname:
        select_query+="AND labelname LIKE %s"
        params.append(f"%{labelname}%")
    label_query=fetch_all(select_query,params=params,fetchall=True)
    return response_success(data=label_query,message="label search success")

# 标签修改
@router.put("/update/{id}")
@limiter.limit("10/minute")
async def label_put(request: Request,label:Label,id: str = Path(description="标签id"),_: User = Depends(get_current_active_user)):
    update_query = (
        "UPDATE labels SET labelname=%s,descr=%s WHERE id=%s;"
    )
    update_data = (label.labelname,label.descr,id)  
    execute_query(update_query, update_data)
    return response_success("label update sucess")

# 标签删除
@router.delete("/delete/{id}")
@limiter.limit("10/minute")
async def label_del(request: Request,id: str = Path(description="标签id"),_: User = Depends(get_current_active_user)):
    update_query = (
        "DELETE FROM labels WHERE id=%s;"
    )
    update_data = (id)  
    execute_query(update_query, update_data)
    return response_success()

# 根据id查询标签
@router.get("/list/search/{id}")
@limiter.limit("10/minute")
async def label_search_id(request: Request,id:str=Path(description="标签id")):
    select_query="SELECT * FROM labels WHERE id=%s"
    label_query=fetch_one(select_query,(id,))
    return response_success(data=label_query,message="label search success")