import { Player } from "./Player.js";
import { Client } from "../client.js"
import { Game } from "./Game.js";
import { Segment } from "./Segment.js";

class MyPlayer extends Player
{
    /**
     * @param {Client} client 
     * @param {Game} game 
     * @param {Segment} rail 
     * @param {Number} nb_goal 
     * @param {Number} position 
     */
    constructor(client, game, rail, nb_goal, position)
    {
        super(game, client.me.id, rail, nb_goal, position, true);
        /**
         * @type {Client}
         */
        this.client = client;
    }    

    /**
     * @param {[string]} keys_pressed 
     */
    update_paddle(keys_pressed)
    {
        let new_pos = this.position;

        if (keys_pressed.includes("s"))
            new_pos -= this.game.config.paddle_speed_per_second_max * this.game.time.deltaTimeSecond() * 1.0;
        if (keys_pressed.includes("w"))
            new_pos += this.game.config.paddle_speed_per_second_max * this.game.time.deltaTimeSecond() * 1.0;
        new_pos = Math.max(0 + this.game.config.paddle_ratio / 2, new_pos);
        new_pos = Math.min(1 - this.game.config.paddle_ratio / 2, new_pos);

        if (this.position === new_pos)
            return;

        this.position = new_pos;

        this.game._send_paddle_position(this.position, this.game.time._current_frame);
    }

    /**
     * @param {Number} new_position 
     * @param {Number} time 
     */
    update_pos(new_position, time)
    {
        let position_verified = new_position;

        let time_diff = (this.time._current_frame - time) / 1000;

        let sign = this - new_position >= 0 ? 1 : -1;

        let distance = Math.abs(this.position - new_position);

        let distance_max = time_diff * this.game.config.paddle_speed_per_second_max;

        if (distance > distance_max)
            position_verified = distance_max * sign;

        this.position = position_verified;
    }
}

export { MyPlayer }