import { Assets, Constantes, Cores } from "./constants.js";

/**
 * Desenha a grade de fundo da cena.
 * @param {Phaser.Scene} scene
 * @param {number} cols
 * @param {number} rows
 * @returns {Phaser.GameObjects.Graphics}
 */
export function montarGrade(scene, cols, rows) {
  const { CELL_SIZE } = Constantes;
  const g = scene.add.graphics();

  g.fillStyle(Cores.FUNDO);
  g.fillRect(0, 0, cols * CELL_SIZE, rows * CELL_SIZE);
  g.lineStyle(1, Cores.GRADE, 1);

  for (let c = 0; c <= cols; c++) {
    g.lineBetween(c * CELL_SIZE, 0, c * CELL_SIZE, rows * CELL_SIZE);
  }
  for (let r = 0; r <= rows; r++) {
    g.lineBetween(0, r * CELL_SIZE, cols * CELL_SIZE, r * CELL_SIZE);
  }

  return g;
}

/**
 * Cria o retângulo visual do alvo.
 * @param {Phaser.Scene} scene
 * @param {number} col
 * @param {number} row
 * @returns {Phaser.GameObjects.Rectangle}
 */
export function criarAlvo(scene, col, row) {
  const { CELL_SIZE } = Constantes;
  return scene.add
    .rectangle(
      col * CELL_SIZE + CELL_SIZE / 2,
      row * CELL_SIZE + CELL_SIZE / 2,
      CELL_SIZE - 8,
      CELL_SIZE - 8,
      Cores.ALVO
    )
    .setDepth(1);
}

/**
 * Cria o sprite do jogador usando o logo do projeto.
 * O asset é carregado em ExemploScene.preload() via this.load.image().
 * @param {Phaser.Scene} scene
 * @param {number} col
 * @param {number} row
 * @returns {Phaser.GameObjects.Image}
 */
export function criarJogador(scene, col, row) {
  const { CELL_SIZE } = Constantes;
  return scene.add
    .image(
      col * CELL_SIZE + CELL_SIZE / 2,
      row * CELL_SIZE + CELL_SIZE / 2,
      Assets.CHAVES.LOGO
    )
    .setDisplaySize(CELL_SIZE - 10, CELL_SIZE - 10)
    .setDepth(10);
}
