from datetime import datetime
from pypos.core.utils.path_utils import get_db_path
from pypos.core.utils.db_helper import connect_sqlite
from pypos.core.database.schema_migrator import run_schema_migrations_once


def _connect():

    run_schema_migrations_once(get_db_path(), strict=False)
    conn = connect_sqlite(get_db_path())
    conn.execute("PRAGMA foreign_keys = ON")
    return conn


def _ensure_table(conn):

    _ = conn


def set_value(key: str, value: str):
    conn = _connect()
    _ensure_table(conn)
    cur = conn.cursor()
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    cur.execute(
        """
        INSERT INTO app_state (key, value, updated_at)
        VALUES (?, ?, ?)
        ON CONFLICT(key) DO UPDATE SET
            value = excluded.value,
            updated_at = excluded.updated_at
        """,
        (key, str(value), now),
    )
    conn.commit()
    conn.close()


def get_value(key: str, default=None):
    conn = _connect()
    _ensure_table(conn)
    cur = conn.cursor()
    cur.execute("SELECT value FROM app_state WHERE key = ?", (key,))
    row = cur.fetchone()
    conn.close()
    if not row:
        return default
    return row[0]


def set_bool(key: str, flag: bool):
    set_value(key, "1" if flag else "0")


def get_bool(key: str, default=False) -> bool:
    val = get_value(key, None)
    if val is None:
        return bool(default)
    return str(val) == "1"


def bootstrap_if_missing(assume_installed: bool = False):
    """
    Inisialisasi state jika belum ada.
    Jika assume_installed=True, tandai first_install_done=1 agar tidak auto-sync.
    """
    conn = _connect()
    _ensure_table(conn)
    cur = conn.cursor()
    cur.execute("SELECT value FROM app_state WHERE key = 'first_install_done'")
    row = cur.fetchone()
    conn.close()
    if row is None:
        set_bool("first_install_done", bool(assume_installed))
        set_bool("first_sync_pending", False)
