/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DataLayer;

import org.jetbrains.annotations.NotNull;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author install1
 */
public class DataMapper {

    public static ArrayList<String> getAllStrings() throws SQLException {
        Connection l_cCon = null;
        PreparedStatement l_pStatement = null;
        ResultSet l_rsSearch = null;
        ArrayList<String> arrayListStr = new ArrayList();
        try {
            l_cCon = DBCPDataSource.getConnection();
            String l_sSQL = "SELECT * FROM `Sentences`";
            l_pStatement = l_cCon.prepareStatement(l_sSQL);
            l_rsSearch = l_pStatement.executeQuery();
            while (l_rsSearch.next()) {
                arrayListStr.add(l_rsSearch.getString(1));
            }
        } finally {
            CloseConnections(l_pStatement, l_rsSearch, l_cCon);
        }
        return arrayListStr;
    }

    public static void InsertMYSQLStrings(ArrayList<String> str) throws SQLException {
        Connection l_cCon = null;
        PreparedStatement l_pStatement = null;
        ResultSet l_rsSearch = null;
        String l_sSQL = "INSERT IGNORE `Sentences` (`Strings`) VALUES (?)";
        try {
            l_cCon = DBCPDataSource.getConnection();
            l_pStatement = l_cCon.prepareStatement(l_sSQL);
            for (String str1 : str) {
                l_pStatement.setString(1, str1);
                l_pStatement.execute();
            }
        } finally {
            CloseConnections(l_pStatement, l_rsSearch, l_cCon);
        }
    }


    public static void CloseConnections(PreparedStatement ps, ResultSet rs, Connection con) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException ex) {
                Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(DataMapper.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public static void checkStringsToDelete() {
        Connection l_cCon = null;
        PreparedStatement l_pStatement = null;
        ResultSet l_rsSearch = null;
        String l_sSQL = "delete from Sentences where last_used < NOW() - INTERVAL 4 WEEK LIMIT 55";
        try {
            l_cCon = DBCPDataSource.getConnection();
            l_pStatement = l_cCon.prepareStatement(l_sSQL);
            l_pStatement.execute();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            CloseConnections(l_pStatement, l_rsSearch, l_cCon);
        }
    }

    public static void updateLastUsed(@NotNull ArrayList<String> mysqlUpdateLastUsed) {
        Connection l_cCon = null;
        PreparedStatement l_pStatement = null;
        ResultSet l_rsSearch = null;
        String l_sSQL = "update Sentences Set last_used = now() where Strings = (?)";
        try {
            l_cCon = DBCPDataSource.getConnection();
            l_pStatement = l_cCon.prepareStatement(l_sSQL);
            for (String str1 : mysqlUpdateLastUsed) {
                l_pStatement.setString(1, str1);
                l_pStatement.execute();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            CloseConnections(l_pStatement, l_rsSearch, l_cCon);
        }
    }
}
