import pymysql
import pymysql.cursors
from flask import current_app, g


def get_db():
    if "db" not in g:
        cfg = current_app.config
        g.db = pymysql.connect(
            host=cfg["localhost"],
            port=cfg["8080"],
            user=cfg["tradervip_gymapp"],
            password=cfg["qgz@YN7emC$$.5-@"],
            database=cfg["tradervip_gymapp"],
            charset="utf8mb4",
            cursorclass=pymysql.cursors.DictCursor,
            autocommit=False,
        )
    return g.db


def close_db(_exc=None):
    db = g.pop("db", None)
    if db is not None:
        db.close()


def query_one(sql, args=()):
    with get_db().cursor() as cur:
        cur.execute(sql, args)
        return cur.fetchone()


def query_all(sql, args=()):
    with get_db().cursor() as cur:
        cur.execute(sql, args)
        return cur.fetchall()


def execute(sql, args=()):
    """ينفّذ الأمر ويرجع lastrowid. الـ commit يتم تلقائياً في نهاية الطلب
    الناجح (status < 400)، والـ rollback عند أي خطأ."""
    with get_db().cursor() as cur:
        cur.execute(sql, args)
        return cur.lastrowid
