// enemy_ai_system.hpp - Executa la IA d'un enemic (moviment + accions tick)
// © 2026 JailDesigner
//
// Llegeix `enemy.getConfig().ai` i aplica la primitiva de moviment activa i,
// opcionalment, les accions periòdiques declarades (tick). Reemplaça el switch
// per type hardcoded de l'antic Enemy::update.

#pragma once

#include <cstddef>

#include "game/systems/collision_system.hpp"

class Enemy;

namespace Systems::EnemyAi {

    // Aplica només la primitiva de moviment activa de l'enemic (sense disparar
    // ni cap altra acció tick). S'usa als steps secundaris (continue/gameover/
    // death) on els enemics han de continuar movent-se de fons però no actuar.
    void move(Enemy& enemy, float delta_time);

    // Aplica moviment + accions periòdiques (SHOOT, etc.). enemy_index és
    // l'índex de l'enemic dins ctx.enemies; s'usa per construir el seu
    // owner_id de bala (ENEMY_OWNER_BASE + index), de manera que el sistema
    // de col·lisions pugui filtrar el self-shot.
    void tick(Collision::Context& ctx, Enemy& enemy, std::size_t enemy_index, float delta_time);

}  // namespace Systems::EnemyAi
