/*
    This file is a part of the SteamWar software.

    Copyright (C) 2020  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.sql;

import de.steamwar.sql.internal.Field;
import de.steamwar.sql.internal.SelectStatement;
import de.steamwar.sql.internal.Statement;
import de.steamwar.sql.internal.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.sql.Timestamp;
import java.util.List;

@AllArgsConstructor
public class CheckedSchematic {

    private static final Table<CheckedSchematic> table = new Table<>(CheckedSchematic.class);
    private static final SelectStatement<CheckedSchematic> statusOfNode = new SelectStatement<>(table, "SELECT * FROM CheckedSchematic WHERE NodeId = ? AND DeclineReason != 'Prüfvorgang abgebrochen' ORDER BY EndTime DESC");
    private static final SelectStatement<CheckedSchematic> nodeHistory = new SelectStatement<>(table, "SELECT * FROM CheckedSchematic WHERE NodeId = ? AND DeclineReason != '' AND DeclineReason != 'Prüfvorgang abgebrochen' ORDER BY EndTime DESC");
    private static final Statement insert = table.insertAll();

    public static void create(int nodeId, String name, int owner, int validator, Timestamp startTime, Timestamp endTime, String reason){
        insert.update(nodeId, owner, name, validator, startTime, endTime, reason);
    }

    public static void create(SchematicNode node, int validator, Timestamp startTime, Timestamp endTime, String reason){
        create(node.getId(), node.getName(), node.getOwner(), validator, startTime, endTime, reason);
    }

    public static List<CheckedSchematic> getLastDeclinedOfNode(int node){
        return statusOfNode.listSelect(node);
    }

    public static List<CheckedSchematic> previousChecks(SchematicNode node) {
        return nodeHistory.listSelect(node.getId());
    }

    @Field(nullable = true)
    private final Integer nodeId;
    @Field
    private final int nodeOwner;
    @Field
    private final String nodeName;
    @Getter
    @Field
    private final int validator;
    @Getter
    @Field
    private final Timestamp startTime;
    @Getter
    @Field
    private final Timestamp endTime;
    @Getter
    @Field
    private final String declineReason;

    public int getNode() {
        return nodeId;
    }

    public String getSchemName() {
        return nodeName;
    }

    public int getSchemOwner() {
        return nodeOwner;
    }
}
