package com.example.scheduler_server;

import java.sql.*;

/*
    Name: TimeOff
    Description: Responsible for sending queries and receiving responses from the database that deal with the
    TimeOff table.
 */
public class TimeOff {

    private final Connection dbConnection;

    protected TimeOff(Connection c) {
        this.dbConnection = c;
    }

    protected String addTimeOff(int employeeID, String startDate, String endDate, boolean approved, String reason){
        String newTimeOff = "";
        Date sD = Date.valueOf(startDate);
        Date eD = Date.valueOf(endDate);
        try {
            Statement myStatement = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            myStatement.executeUpdate("INSERT INTO TimeOff (employeeID, startDate, endDate, approved, reason) " +
                    "VALUES ('" + employeeID +"', '"+ sD +"', '"+ eD +"', '"+ approved +"', '" + reason + "')");
            ResultSet myRs = myStatement.executeQuery("select * from TimeOff where employeeID=" + employeeID +
                    " and startDate='" + sD + "' and endDate=" + eD);
            if (myRs.last()) {
                newTimeOff = myRs.getString("ID") + "," + myRs.getString("employeeID" ) + "," +
                        myRs.getString("startDate") + "," + myRs.getString("endDate") +
                        "," + myRs.getString("approved") + "," + myRs.getString("reason");
            }
        } catch (SQLException exception) {
            exception.printStackTrace();
            return newTimeOff;
        }
        System.out.println("Shift successfully added");
        return newTimeOff;
    }

    protected int removeTimeOff(int timeOffID){
        try {
            Statement myStatement = dbConnection.createStatement();
            myStatement.executeUpdate("DELETE FROM TimeOff WHERE (ID =" + timeOffID + ")");
        } catch (SQLException exception) {
            exception.printStackTrace();
            return -1;
        }
        return timeOffID;
    }

    protected String setTimeOffApproval(int ID, boolean approved){
        String editedTimeOff = "";
        try {
            Statement myStatement = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            myStatement.executeUpdate("update TimeOff set approved=" + approved + " where ID=" + ID);
            ResultSet myRs = myStatement.executeQuery("select * from TimeOff where ID=" + ID);
            if (myRs.last()) {
                editedTimeOff = myRs.getString("ID") + "," + myRs.getString("approved");
            }
        } catch (SQLException exception) {
            exception.printStackTrace();
            return editedTimeOff;
        }
        System.out.println("Shift successfully added");
        return editedTimeOff;
    }

    protected void removeAllTimeOffByID(int employeeID) {
        try {
            Statement myStatement = dbConnection.createStatement();
            myStatement.executeUpdate("DELETE FROM TimeOff WHERE (employeeID =" + employeeID + ")");
        } catch (SQLException exception) {
            exception.printStackTrace();
        }
    }

    protected String allTimeOff(){
        StringBuilder response = new StringBuilder("allTimeOff");
        try {
            Statement myStatement = dbConnection.createStatement();
            ResultSet myRs = myStatement.executeQuery("SELECT * FROM shifts");
            while (myRs.next()) {
                response.append("/").append(myRs.getString("ID"))
                        .append(",").append(myRs.getString("employeeID"))
                        .append(",").append(myRs.getString("startDate"))
                        .append(",").append(myRs.getString("endDate"))
                        .append(",").append(myRs.getString("approved"))
                        .append(",").append(myRs.getString("reason"));
            }
        } catch (SQLException exception) {
            exception.printStackTrace();
        }
        return response.toString();
    }
}