"""Connection helper for the CMMC USB check-in/out database.

Credentials are pulled from app config (env-backed, see Config.CMMC_USB_DB_*),
never hardcoded. Used by the USB plugin to track device check-in/out against a
separate MySQL database (cmmc_usb), mirroring the read-only employee-directory
pattern in employee_db.py. Unlike the employee DB this one is read-write, so
callers commit their own writes and close the connection in a finally block.
"""

import pymysql
from flask import current_app


def _setting_or_config(setting_key, config_key):
    """Non-secret config: a saved Setting wins, else the env-backed app config.

    Lets the setup wizard edit host/name/user without touching .env, while the
    password stays env-only.
    """
    from shopdb.core.models import Setting
    try:
        row = Setting.query.filter_by(key=setting_key).first()
        if row and row.value:
            return row.value
    except Exception:
        pass
    return current_app.config[config_key]


def cmmc_usb_connection():
    """Open a pymysql connection to the cmmc_usb DB."""
    return pymysql.connect(
        host=_setting_or_config('cmmc_usb_db_host', 'CMMC_USB_DB_HOST'),
        user=_setting_or_config('cmmc_usb_db_user', 'CMMC_USB_DB_USER'),
        password=current_app.config['CMMC_USB_DB_PASSWORD'],
        database=_setting_or_config('cmmc_usb_db_name', 'CMMC_USB_DB_NAME'),
        cursorclass=pymysql.cursors.DictCursor,
    )
