import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';

import {Observable} from 'rxjs';
import {CreatePlayer} from '../models/create-player';
import {Player} from '../models/player';
import {Team} from '../models/team';
import {RecruitNewPlayer} from '../models/recruit-new-player';
import {RecruitVeteran} from '../models/recruit-veteran';

@Injectable({
  providedIn: 'root'
})
export class PlayerService {

  getAllFreeUrl: string = 'http://localhost:8080/pa165/api/public/player/free';
  getAllUrl: string = 'http://localhost:8080/pa165/api/public/player/all';
  getForTeamUrl: string = 'http://localhost:8080/pa165/api/public/player/team/'
  createNewUrl: string = 'http://localhost:8080/pa165/api/manage/team/player/recruit';
  recruitUrl: string = 'http://localhost:8080/pa165/api/manage/team/player/transfer';
  fireUrl: string = 'http://localhost:8080/pa165/api/manage/team/player/fire/';

  constructor(private http: HttpClient) {
  }

  getPlayers(): Observable<Player[]> {
    return this.http.get<Player[]>(this.getAllUrl);
  }

  getFreePlayers(): Observable<Player[]> {
    return this.http.get<Player[]>(this.getAllFreeUrl);
  }

  getPlayersForTeam(id: number): Observable<Player[]> {
    return this.http.get<Player[]>(this.getForTeamUrl + id);
  }

  recruitPlayer(player: CreatePlayer, team: Team): void {
    let newPlayer: RecruitNewPlayer = {name: player.name, teamId: team.id};
    this.http.post<RecruitNewPlayer>(this.createNewUrl, newPlayer).subscribe();
  }

  recruitVeteranPlayer(player: Player, team: Team): void {
    let newPlayer: RecruitVeteran = {playerId: player.id, teamId: team.id};
    this.http.post<RecruitVeteran>(this.recruitUrl, newPlayer).subscribe();
  }

  firePlayer(id: number): void {
    this.http.delete(this.fireUrl + id).subscribe();
  }
}