/*
 *   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.velocitycore.commands;

import de.steamwar.linkage.Linked;
import de.steamwar.velocitycore.listeners.PollSystem;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator;
import de.steamwar.messages.Chatter;
import de.steamwar.sql.PollAnswer;

@Linked
public class PollCommand extends SWCommand {

    public PollCommand() {
        super("poll");
    }

    @Register
    public void genericCommand(@Validator Chatter sender) {
        PollSystem.sendPoll(sender);
    }

    @Register(noTabComplete = true)
    public void answerPoll(@Validator Chatter sender, String answerString) {
        int answer;
        try {
            answer = Integer.parseUnsignedInt(answerString);
            if(answer < 1 || answer > PollSystem.answers())
                throw new NumberFormatException();
        }catch(NumberFormatException e){
            sender.system("POLL_NO_ANSWER");
            return;
        }

        PollAnswer pollAnswer = PollAnswer.get(sender.user().getId());
        if(pollAnswer.hasAnswered())
            sender.system("POLL_ANSWER_REFRESH");
        else
            sender.system("POLL_ANSWER_NEW");

        pollAnswer.setAnswer(answer);
    }

    @ClassValidator(value = Chatter.class, local = true)
    public TypeValidator<Chatter> noPoll() {
        return PollSystem.noPoll();
    }
}
