import pymysql
from fastapi import HTTPException, status
DB_CONFIG = {
    "host": "111.229.38.129",
    "user": "root",
    "password": "zl981023",
    "database": "blogapi",
    "charset": "utf8mb4",
    "cursorclass": pymysql.cursors.DictCursor,
}

# 创建数据库连接


def create_connection():
    return pymysql.connect(**DB_CONFIG)

# 执行 SQL 查询


def execute_query(query, params=None, fetchall=False,lastrowid=False):
    conn = create_connection()
    with conn.cursor() as cursor:
        cursor.execute(query, params)
        if fetchall:
            result = cursor.fetchall()
        elif lastrowid:
            result = cursor.lastrowid
        else:
            result = cursor.fetchone()
    conn.commit()
    conn.close()
    return result

# 查询单个数据


def fetch_one(query, params=None):
    result = execute_query(query, params)
    return result if result else None

# 查询所有数据


def fetch_all(query, params=None, fetchall=True):
    return execute_query(query, params, fetchall)


# 验证数据是否存在,不存在抛出异常
def raise_if_not_found(item, message="Item not found"):
    if not item:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=message
        )

# 验证唯一,非唯一抛出异常


def raise_if_exists(item, message="Item already exists"):
    if item:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail=message
        )

# 成功响应数据
def response_success(data={}, message="data do success"):
    if data is None:
        # 如果 data 未传递,返回无 data 的响应
        return {
            "status": status.HTTP_200_OK,
            "message": message,
        }
    elif not data:
        # 如果 data 传递了但是为空,返回空列表作为 data 的响应
        return {
            "status": status.HTTP_200_OK,
            "message": message,
            "data": []
        }
    else:
        # 如果 data 非空,返回包含 data 的响应
        return {
            "status": status.HTTP_200_OK,
            "message": message,
            "data": data
        }