#pragma once

#include <cstdint>
#include "CoopGame.h"

// Minimal, lightweight AI driver for a CoopGame player side (left or right).
// It chooses a target rotation/x placement using a simple board heuristic,
// then steers the active piece toward that target at a human-like input rate.
class CoopAIController {
public:
    CoopAIController() = default;

    void reset();

    // frameMs is the frame delta in milliseconds (same unit used across the gameplay loop).
    void update(CoopGame& game, CoopGame::PlayerSide side, double frameMs);

private:
    uint64_t m_lastPieceSeq = 0;
    bool m_hasPlan = false;

    int m_targetRot = 0;
    int m_targetX = 10;

    // Input pacing (ms). These intentionally mirror the defaults used for human input.
    double m_dasMs = 170.0;
    double m_arrMs = 40.0;
    double m_rotateIntervalMs = 110.0;

    // Internal timers/state for rate limiting.
    double m_moveTimerMs = 0.0;
    int m_moveDir = 0; // -1, 0, +1
    double m_rotateTimerMs = 0.0;

    void computePlan(const CoopGame& game, CoopGame::PlayerSide side);
};
