import platform
import socket
import logging
import sqlite3
from pypos.core.utils.db_helper import connect_sqlite

LOGGER = logging.getLogger(__name__)


def get_device_info():
    return f"{platform.system()} {platform.release()} ({platform.machine()})"


def get_ip_address():
    try:
        return socket.gethostbyname(socket.gethostname())
    except OSError:
        return "unknown"

def log_audit(db_path, user_id, action, table_name, record_id, details="", location="local"):
    try:

        conn = connect_sqlite(db_path)
        conn.execute("PRAGMA foreign_keys = ON")
        cursor = conn.cursor()

        cursor.execute(
            """
            INSERT INTO audit_log (
                user_id, action, table_name, record_id,
                ip_address, device_info, location, details
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            """,
            (
                user_id,
                str(action or "").upper(),
                table_name,
                record_id,
                get_ip_address(),
                get_device_info(),
                location,
                details,
            ),
        )

        conn.commit()
        conn.close()
    except (sqlite3.Error, OSError, RuntimeError, ValueError, TypeError) as e:
        LOGGER.warning("Gagal menyimpan audit log: %s", e)
