import Sprite from '../base/sprite';
import { BUBBLE_RADIUS, drawBubble3D } from './bubble';
import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../render';

/**
 * 飞行中的泡泡类（继承 Sprite）
 * 由射击器发射后在屏幕上运动，碰到左右边界反弹，
 * 超出顶部或底部后标记为 inactive。
 */
export default class FireBubble extends Sprite {
  /**
   * @param {number} x      初始圆心 x
   * @param {number} y      初始圆心 y
   * @param {number} vx     x 方向速度（px/帧）
   * @param {number} vy     y 方向速度（px/帧）
   * @param {number} color  颜色编号 1-6
   */
  constructor(x, y, vx, vy, color) {
    super('', BUBBLE_RADIUS * 2, BUBBLE_RADIUS * 2, x, y);

    this.vx = vx;
    this.vy = vy;
    this.color = color;

    // x, y 在本类中表示圆心坐标（与 Sprite 保持一致）
    this.active = true;
  }

  /**
   * 每帧更新位置：
   *  - 碰到左右边界时水平速度取反（反弹）
   *  - 超出顶部或底部时标记为 inactive
   */
  update() {
    if (!this.active) return;

    this.x += this.vx;
    this.y += this.vy;

    const R = BUBBLE_RADIUS;

    // 左右边界反弹
    if (this.x - R <= 0) {
      this.x = R;
      this.vx = Math.abs(this.vx);
    } else if (this.x + R >= SCREEN_WIDTH) {
      this.x = SCREEN_WIDTH - R;
      this.vx = -Math.abs(this.vx);
    }

    // 超出顶部或底部则标记失活
    if (this.y + R < 0 || this.y - R > SCREEN_HEIGHT) {
      this.active = false;
      this.visible = false;
    }
  }

  /**
   * 绘制飞行中的泡泡（3D 光泽效果）
   */
  render(ctx) {
    if (!this.visible || !this.active) return;
    drawBubble3D(ctx, this.x, this.y, BUBBLE_RADIUS, this.color);
  }
}
