/*
 *   This file is a part of the SteamWar software.
 *
 *   Copyright (C) 2025 SteamWar.de-Serverteam
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU Affero General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *   GNU Affero General Public License for more details.
 *
 *   You should have received a copy of the GNU Affero General Public License
 *   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package de.steamwar.fightsystem.listener;

import de.steamwar.fightsystem.ArenaMode;
import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentListener;
import de.steamwar.scoreboard.SWScoreboard;
import de.steamwar.scoreboard.ScoreboardCallback;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;

import java.util.HashMap;
import java.util.Objects;

public class FightScoreboard implements Listener, ScoreboardCallback {

    public static Team getBukkitTeam(String name) {
        Scoreboard scoreboard = Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
        Team team = scoreboard.getTeam(name);
        if (team != null) return team;

        return scoreboard.registerNewTeam(name);
    }

    private static FightScoreboard scoreboard;

    public static FightScoreboard getScoreboard() {
        if (scoreboard == null) scoreboard = new FightScoreboard();
        return scoreboard;
    }

    private String title = "";
    private final HashMap<String, Integer> scores = new HashMap<>();


    private FightScoreboard() {
        new StateDependentListener(ArenaMode.Replay, FightState.All, this);
        Bukkit.getOnlinePlayers().forEach(player -> SWScoreboard.impl.createScoreboard(player, this));
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        SWScoreboard.impl.createScoreboard(event.getPlayer(), this);
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        SWScoreboard.impl.removeScoreboard(event.getPlayer());
    }

    public void setTitle(String t) {
        scores.clear();
        title = t;
    }

    public void addScore(String string, int i) {
        scores.put(string, i);
    }

    @Override
    public String getTitle() {
        return title;
    }

    @Override
    public HashMap<String, Integer> getData() {
        return scores;
    }
}
