#ifndef JNR_LASER_TURRET_H
#define JNR_LASER_TURRET_H

#include "engine/entity.h"
#include "engine/camera.h"
#include "engine/tilemap.h"

/* ═══════════════════════════════════════════════════
 *  LASER TURRET — Hazard that charges up a visible
 *  indicator beam, then fires a sustained laser for
 *  several seconds. Two variants:
 *    - Fixed direction (placed facing left/right)
 *    - Tracking (slowly rotates toward the player
 *      during idle/charge, locks on fire)
 * ═══════════════════════════════════════════════════ */

#define LASER_WIDTH         14
#define LASER_HEIGHT        14
#define LASER_CHARGE_TIME   1.5f   /* seconds to charge up         */
#define LASER_FIRE_TIME     2.5f   /* seconds beam stays active    */
#define LASER_COOLDOWN_TIME 2.0f   /* seconds before next cycle    */
#define LASER_TRACK_SPEED   1.5f   /* radians/s tracking rate      */
#define LASER_DAMAGE        1
#define LASER_DAMAGE_CD     0.5f   /* seconds between damage ticks */
#define LASER_HEALTH        3

typedef enum LaserState {
    LASER_IDLE,
    LASER_CHARGING,
    LASER_FIRING,
    LASER_COOLDOWN,
} LaserState;

typedef struct LaserTurretData {
    LaserState state;
    float      timer;           /* countdown for current state     */
    float      aim_angle;       /* current aim angle (radians)     */
    float      damage_cd;       /* cooldown between damage ticks   */
    bool       tracking;        /* true = slowly follows player    */
    float      beam_end_x;     /* computed beam endpoint (world)  */
    float      beam_end_y;
} LaserTurretData;

void    laser_turret_register(EntityManager *em);
Entity *laser_turret_spawn(EntityManager *em, Vec2 pos);
Entity *laser_turret_spawn_tracking(EntityManager *em, Vec2 pos);

#endif /* JNR_LASER_TURRET_H */
