import java.util.Scanner;

class Items {
    private int[] liste = new int[3];
    private Player joueur;
    private Player adversaire;        // Associer l'adversaire du possesseur des items

    Items(Player p) {
        joueur = p;
        adversaire = p.adversaire;
    }

    private void radar() {      // Scanner s'il y a des bateaux dans le rayon de 1 case autour du point choisi. Nombre associe: 1
        int[] loc = {-1, -1};
        while (loc[0] == -1 || loc[1] == -1) {
            loc = joueur.interieur(0);
        }
        for (int i = loc[1] - 1; i <= loc[1] + 1; i++) {
            for (int j = loc[0] - 1; j <= loc[0] + 1; j++) {
                if (i >= 0 && i < adversaire.plateau.length && j >= 0 && j < adversaire.plateau[0].length) {
                    if (adversaire.plateau[i][j] == 'o')
                        joueur.plateauadversaire[i][j] = 'o';
                    else if (adversaire.plateau[i][j] == ' ')
                        joueur.plateauadversaire[i][j] = '.';
                }
            }
        }
    }

    private void tirerLigne() {      // Tirer toute une colonne. Nombre associe: 2
        int l = -1;
        while (l == -1)
            l = joueur.interieur(2)[0];
        for (int i = 0; i < adversaire.plateau[0].length; i++) {
            joueur.tirerAvecItems(l, i);
        }
    }

    private void tirerColonne() {    // Tirer toute la ligne. Nombre associe: 3
        int c = -1;
        while (c == -1)
            c = joueur.interieur(1)[0];
        for (int i = 0; i < adversaire.plateau.length; i++) {
            joueur.tirerAvecItems(i, c);
        }
    }

    private int panierVide() {  // Verifier si le panier du joueur a encore de la place pour mettre des items. Renvoie le nombre de la case vide sinon revoie 3
        for (int i = 0; i < liste.length; i++) {
            if (liste[i] == 0) {
                return i;
            }
        }
        return 3;
    }

    void viderLePanier() {   // Vider le panier au debut du match
        for (int i = 0; i < liste.length; i++) {
            liste[i] = 0;
        }
    }

    void genererItems() {
        if (panierVide() <= 2) {        // Au cas ou le panier reste encore de la place...
            int n = (int) (Math.random() * 100);       // Generer un taux aleatoire pour voir quel item le joueur aura
//            System.out.println("items' rate n = " + n);
            // Si n <= 60 (taux de 60%) on a droit d'obtenir des nouveaux items
            if (n <= 60) {
                if (n >= 0 && n <= 20) {
                    liste[panierVide()] = 1;
                } else if (n >= 21 && n <= 40) {
                    liste[panierVide()] = 2;
                } else if (n >= 41 && n <= 60) {
                    liste[panierVide()] = 3;
                }
            }
        }

    }

    void choisirItems() {
        if (panierVide() != 0) {
            Scanner sc = new Scanner(System.in);
            System.out.println(this);
            int n = 10;         // Initialiser n pour entrer dans le boucle
            while (n > 2 || n < 0) {        // Verifier si n correpond au nombre des items dans le tableau
                System.out.println("Quel item voulez vous utiliser ? (tapez le numero)");
                n = sc.nextInt() - 1;           // Nombre saisi par le joueur
            }
            int i = liste[n];                   // L'item correspondant au choix du joueur
            switch (i) {
                case 1:
                    joueur.items.radar();
                    break;
                case 2:
                    joueur.items.tirerLigne();
                    break;
                case 3:
                    joueur.items.tirerColonne();
                    break;
                default:
                    break;
            }
        } else {
            System.out.println("Vous n'avez pas d'items.");
        }
    }

    @Override
    public String toString() {      // Imprimer la liste des items presents dans le panier
        String s = "Vous avez :";
        for (int i = 0; i < liste.length; i++) {
            if (liste[i] != 0) {        // Si la case n'est pas vide...
                s += " " + (i + 1) + ". ";          // Afficher le nombre de la case correspondante (commencant de 1) || 1 <=> 0
                switch (liste[i]) {     // Car chaque case du tableau correspond a un item ayant son nombre associe
                    case 1:
                        s += "Radar";
                        break;
                    case 2:
                        s += "Tirer une ligne";
                        break;
                    case 3:
                        s += "Tirer une colonne";
                        break;
                    default:
                        break;
                }
            }
        }
        if (panierVide() == 0)
            s += " aucun item ici pour l'instant...";
        return s;
    }

}