# log_utils.py
import sqlite3
import json
import time
import threading
import queue
import logging
from chat import get_game_db, close_game_connection

logger = logging.getLogger(__name__)

_log_queue = queue.Queue()
_worker_started = False

def _log_worker():
    while True:
        try:
            record = _log_queue.get(timeout=1)
            if record is None:
                break
            conn = None
            try:
                conn = get_game_db()
                c = conn.cursor()
                c.execute(
                    'INSERT INTO player_logs (player_name, event_type, description, details, created_at) VALUES (?, ?, ?, ?, ?)',
                    (record['player_name'], record['event_type'], record['description'], record['details'], record['created_at'])
                )
                conn.commit()
            except Exception as e:
                logger.error(f"写入玩家日志失败: {e}")
            finally:
                if conn:
                    close_game_connection(conn)
        except queue.Empty:
            continue

def start_log_worker():
    global _worker_started
    if not _worker_started:
        threading.Thread(target=_log_worker, daemon=True).start()
        _worker_started = True

def log_player_event(player_name, event_type, description, details=None):
    if not player_name:
        return
    record = {
        'player_name': player_name,
        'event_type': event_type,
        'description': description,
        'details': json.dumps(details, ensure_ascii=False) if details else None,
        'created_at': int(time.time())
    }
    _log_queue.put(record)