-- =============================================================================
-- Vue materialisée pour les User-Agents - Dashboard Bot Detector
-- =============================================================================
-- 
-- Instructions d'installation :
-- -----------------------------
-- 1. Se connecter à ClickHouse en CLI :
--    clickhouse-client --host test-sdv-anubis.sdv.fr --port 8123 \
--      --user default --password <votre_mot_de_passe>
--
-- 2. Copier-coller CHAQUE BLOC séparément (un par un)
--
-- 3. Vérifier que la vue est créée :
--    SELECT count() FROM mabase_prod.view_dashboard_user_agents;
--
-- =============================================================================

USE mabase_prod;

-- =============================================================================
-- BLOC 1/3 : Créer la table
-- =============================================================================

CREATE TABLE IF NOT EXISTS mabase_prod.view_dashboard_user_agents
(
    src_ip        IPv4,
    ja4           String,
    hour          DateTime,
    log_date      Date,
    user_agents   Array(String),
    requests      UInt64
)
ENGINE = AggregatingMergeTree()
PARTITION BY log_date
ORDER BY (src_ip, ja4, hour)
TTL log_date + INTERVAL 7 DAY
SETTINGS index_granularity = 8192;

-- =============================================================================
-- BLOC 2/3 : Créer la vue materialisée
-- =============================================================================

CREATE MATERIALIZED VIEW IF NOT EXISTS mabase_prod.view_dashboard_user_agents_mv
TO mabase_prod.view_dashboard_user_agents
AS SELECT
    src_ip,
    ja4,
    toStartOfHour(time) AS hour,
    toDate(time) AS log_date,
    groupArrayDistinct(header_user_agent) AS user_agents,
    count() AS requests
FROM mabase_prod.http_logs
WHERE header_user_agent != '' AND header_user_agent IS NOT NULL
  AND time >= now() - INTERVAL 7 DAY
GROUP BY src_ip, ja4, hour, log_date;

-- =============================================================================
-- BLOC 3/3 : Créer les index (optionnel - améliore les performances)
-- =============================================================================

ALTER TABLE mabase_prod.view_dashboard_user_agents 
ADD INDEX IF NOT EXISTS idx_user_agents_ip (src_ip) TYPE minmax GRANULARITY 1;

ALTER TABLE mabase_prod.view_dashboard_user_agents 
ADD INDEX IF NOT EXISTS idx_user_agents_ja4 (ja4) TYPE minmax GRANULARITY 1;

-- =============================================================================
-- FIN
-- =============================================================================
-- 
-- Pour vérifier que la vue fonctionne :
-- -------------------------------------
-- SELECT * FROM mabase_prod.view_dashboard_user_agents LIMIT 10;
--
-- Pour rafraîchir manuellement (si nécessaire) :
-- ----------------------------------------------
-- OPTIMIZE TABLE mabase_prod.view_dashboard_user_agents FINAL;
--
-- =============================================================================
