"""
The template of the main script of the machine learning process
"""

import pygame


class MLPlay:
    def __init__(self, ai_name, *args, **kwargs):
        """
        Constructor

        @param ai_name A string "1P" or "2P" indicates that the `MLPlay` is used by
               which side.
        """
        self.side = ai_name
        print(f"Initial Game {ai_name} ml script")
        self.time = 0

    def update(self, scene_info: dict, keyboard=[], *args, **kwargs):
        """
        Generate the command according to the received scene information
        """
        if scene_info["status"] != "GAME_ALIVE":
            # print(scene_info)
            return "RESET"
        command = []
        if self.side == "1P":
            print(scene_info["oil"])
            if pygame.K_RIGHT in keyboard:
                command.append("TURN_RIGHT")
            elif pygame.K_LEFT in keyboard:
                command.append("TURN_LEFT")
            elif pygame.K_UP in keyboard:
                command.append("FORWARD")
            elif pygame.K_DOWN in keyboard:
                command.append("BACKWARD")

            if pygame.K_z in keyboard:
                command.append("AIM_LEFT")
            elif pygame.K_x in keyboard:
                command.append("AIM_RIGHT")

            if pygame.K_m in keyboard:
                command.append("SHOOT")
            # debug
            if pygame.K_b in keyboard:
                command.append("DEBUG")
            # paused
            if pygame.K_t in keyboard:
                command.append("PAUSED")
        elif self.side == "2P":
            if pygame.K_d in keyboard:
                command.append("TURN_RIGHT")
            elif pygame.K_a in keyboard:
                command.append("TURN_LEFT")
            elif pygame.K_w in keyboard:
                command.append("FORWARD")
            elif pygame.K_s in keyboard:
                command.append("BACKWARD")

            if pygame.K_q in keyboard:
                command.append("AIM_LEFT")
            elif pygame.K_e in keyboard:
                command.append("AIM_RIGHT")

            if pygame.K_f in keyboard:
                command.append("SHOOT")

        if not command:
            command.append("NONE")

        return command

    def reset(self):
        """
        Reset the status
        """
        print(f"reset Game {self.side}")
