import Barco, { BarcoTipo } from './barco';
import Mapa, { EstadoCelda } from './mapa';

export default class Jugador {
  public mapaFlota: Mapa = new Mapa();
  public mapaDeAtaques: Mapa = new Mapa();

  public jugadorPreparado: boolean = false;

  public barcos: Barco[] = [
    new Barco(1, 0, 0, BarcoTipo.PORTAAVIONES, 'VERTICAL'),
    new Barco(2, 1, 0, BarcoTipo.ACORAZADO, 'VERTICAL'),
    new Barco(3, 2, 0, BarcoTipo.ACORAZADO, 'VERTICAL'),
    new Barco(4, 3, 0, BarcoTipo.ACORAZADO, 'VERTICAL'),
    new Barco(5, 4, 0, BarcoTipo.DESTRUCTOR, 'VERTICAL'),
    new Barco(6, 5, 0, BarcoTipo.DESTRUCTOR, 'VERTICAL'),
    new Barco(7, 6, 0, BarcoTipo.DESTRUCTOR, 'VERTICAL'),
    new Barco(8, 7, 0, BarcoTipo.FRAGATA, 'VERTICAL'),
    new Barco(9, 8, 0, BarcoTipo.FRAGATA, 'VERTICAL'),
  ];

  constructor(public nickname: string) {}

  prepararFlota(barcos: Barco[]) {
    this.barcos = barcos;
    this.mapaFlota.setBarcos(this.barcos);
    this.jugadorPreparado = true;
  }

  setBarcos(barcos: Barco[]) {
    this.mapaFlota.setBarcos(barcos);
  }
  
  realizarDisparo(x: number, y: number, rival: Jugador): boolean {
    const acierto = rival.mapaFlota.verificaDisparo(x, y);
    this.mapaDeAtaques.marcaDisparo(x,y,acierto ? EstadoCelda.Golpe : EstadoCelda.Agua);
    return acierto;
  }

  haPerdido(): boolean {
    for (const barco of this.barcos) {
      if (!barco.destruido) {
        return false;
      }
    }
    return true;
  }

}
