# -*- coding: utf-8 -*-

import pymysql
from config import DB_CONFIG


def get_conn():
    return pymysql.connect(
        host=DB_CONFIG["host"],
        port=DB_CONFIG["port"],
        user=DB_CONFIG["user"],
        password=DB_CONFIG["password"],
        database=DB_CONFIG["database"],
        charset=DB_CONFIG["charset"],
        cursorclass=pymysql.cursors.DictCursor,
        autocommit=False,
    )


def fetch_one(query, params=None):
    conn = get_conn()

    try:
        with conn.cursor() as cur:
            cur.execute(query, params or ())
            return cur.fetchone()

    finally:
        conn.close()


def fetch_all(query, params=None):
    conn = get_conn()

    try:
        with conn.cursor() as cur:
            cur.execute(query, params or ())
            return cur.fetchall()

    finally:
        conn.close()


def execute(query, params=None):
    conn = get_conn()

    try:
        with conn.cursor() as cur:
            result = cur.execute(query, params or ())
            conn.commit()
            return result

    except Exception:
        conn.rollback()
        raise

    finally:
        conn.close()


def execute_insert(query, params=None):
    conn = get_conn()

    try:
        with conn.cursor() as cur:
            cur.execute(query, params or ())
            inserted_id = cur.lastrowid

            conn.commit()

            return inserted_id

    except Exception:
        conn.rollback()
        raise

    finally:
        conn.close()