<?php
/**
 * class/code.php — KamiCode: uso del propio usuario (sin coste; el coste es solo admin).
 */
if (!defined('IN_APP')) { die('Acceso denegado'); }

class Code extends App
{
    /** Totales (histórico) del usuario, SIN coste. */
    public function stats($idUser)
    {
        $this->ensureSchema('kamicode_usage');
        $idUser = (int)$idUser;
        return $this->db->query("SELECT COUNT(*) req, COUNT(DISTINCT id_session) sess, COALESCE(SUM(tokens_in),0) tin, COALESCE(SUM(tokens_out),0) tout, COALESCE(SUM(tokens_cached),0) tcached FROM kamicode_usage WHERE id_user=$idUser")->fetch_assoc();
    }

    /** Uso del usuario por modelo, SIN coste. */
    public function byModel($idUser)
    {
        $this->ensureSchema('kamicode_usage');
        $idUser = (int)$idUser;
        return $this->db->query("SELECT model, COUNT(*) req, COALESCE(SUM(tokens_in),0) tin, COALESCE(SUM(tokens_out),0) tout, COALESCE(SUM(tokens_cached),0) tcached FROM kamicode_usage WHERE id_user=$idUser GROUP BY model ORDER BY req DESC")->fetch_all(MYSQLI_ASSOC);
    }

    /** Mapa ['id_modelo' => 'sobrenombre'] para no exponer los modelos reales al usuario. */
    public function brands()
    {
        $this->ensureSchema('model_brands');
        $rows = $this->db->query("SELECT model, brand FROM model_brands")->fetch_all(MYSQLI_ASSOC);
        $map = array();
        foreach ($rows as $r) $map[$r['model']] = $r['brand'];
        return $map;
    }

    /** Peticiones por día del usuario (para el heatmap). */
    public function daily($idUser, $days = 371)
    {
        $this->ensureSchema('kamicode_usage');
        $idUser = (int)$idUser; $days = (int)$days;
        $start = date('Y-m-d', time() - $days * 86400);
        $rows = $this->db->query("SELECT DATE(created_at) d, COUNT(*) req, COUNT(DISTINCT id_session) sess, COALESCE(SUM(tokens_in),0) tin, COALESCE(SUM(tokens_out),0) tout, COALESCE(SUM(tokens_cached),0) cached FROM kamicode_usage WHERE id_user=$idUser AND created_at >= '$start' GROUP BY DATE(created_at)")->fetch_all(MYSQLI_ASSOC);
        $map = array();
        foreach ($rows as $r) $map[$r['d']] = $r;
        return $map;
    }
}
