import { toRadians } from '../../../lib/toRadians/toRadians';
import { Ball } from '../ball';

/**
 * Создает копию мяча в той же точке с направлением, повернутым на заданный угол
 * @param {Ball} ball исходный мяч
 * @param {number} angle угол поворота направления в градусах
 * @returns {Ball | null} новый мяч с повернутой скоростью
 */
export function clone(ball, angle) {
  try {
    if (!(ball instanceof Ball)) {
      throw new Error('Аргумент ball должен быть экземпляром класса мяча');
    }

    if (typeof angle !== 'number') {
      throw new Error('Угол поворота должен являться числом');
    }

    const clonedBall = new Ball(ball.x, ball.y, ball.radius, ball.speed);
    const angleInRadians = toRadians(angle);
    const cos = Math.cos(angleInRadians);
    const sin = Math.sin(angleInRadians);

    clonedBall.status = ball.status;
    clonedBall.horizontalSpeed = ball.horizontalSpeed * cos - ball.verticalSpeed * sin;
    clonedBall.verticalSpeed = ball.horizontalSpeed * sin + ball.verticalSpeed * cos;
    clonedBall.defaultHorizontalSpeed = clonedBall.horizontalSpeed;
    clonedBall.defaultVerticalSpeed = clonedBall.verticalSpeed;

    return clonedBall;
  } catch (err) {
    console.error(err);
    return null;
  }
}
