package me.gtacraft.plugins.gangs.database;
import me.gtacraft.plugins.gangs.GTAGangs;
import me.gtacraft.plugins.gangs.Gang;
import me.gtacraft.plugins.gangs.GangManager;
import me.gtacraft.plugins.gangs.util.LocationUtil;
import me.gtacraft.plugins.gangs.util.Util;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
/**
* Created by Connor on 6/29/14. Designed for the GTA-Factions project.
*/
public class SQLVars {
public static String CREATE_DATABASE = "CREATE DATABASE IF NOT EXISTS `%db%`;";
//uuid - gang - role
public static String CREATE_PLAYERS_TABLE = "CREATE TABLE IF NOT EXISTS `%db%`.`userdata` (" +
"`uuid` varchar(48) NOT NULL, " +
"`gang` varchar(255), " +
"`role` INTEGER, " +
"PRIMARY KEY (`uuid`)"+
") ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;";
public static String CREATE_GANGS_TABLE = "CREATE TABLE IF NOT EXISTS `%db%`.`gangs` (" +
"`id` int(11) NOT NULL AUTO_INCREMENT, " +
"`name` varchar(10) NOT NULL, " +
"`members` longtext NOT NULL, " +
"`friendly_fire` tinyint(3) NOT NULL, " +
"`hideout` varchar(255), " +
"PRIMARY KEY (`id`)" +
") ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;";
public static String GET_GANGS = "SELECT * FROM gangs;";
public static String GET_GANG = "SELECT members, friendly_fire, hideout FROM gangs WHERE name LIKE '%name%';";
public static String INSERT_NEW_PLAYER = "INSERT INTO userdata(uuid, gang, role) VALUES('%uuid%',NULL,NULL);";
public static String SELECT_PLAYER = "SELECT gang, role FROM userdata WHERE uuid LIKE '%uuid%';";
public static String INSERT_NEW_GANG = "INSERT INTO gangs(name, members, friendly_fire) VALUES('%name%', '%members%', %friendly_fire%);";
public static String UPDATE_PLAYER = "UPDATE userdata SET gang='%gang%', role=%role% WHERE uuid LIKE '%uuid%';";
public static String REMOVE_PLAYER_FROM_GANG = "UPDATE userdata SET gang=NULL, role=NULL WHERE uuid='%uuid%';";
public static String DELETE_GANG = "DELETE FROM gangs WHERE name LIKE '%name%';";
public static String SET_GANG_HIDEOUT = "UPDATE gangs SET hideout='%hideout%' WHERE name LIKE '%name%';";
public static String UPDATE_GANG = "UPDATE gangs SET members='%members%', friendly_fire=%friendly_fire%, hideout='%hideout%' WHERE name LIKE '%name%';";
public static String RENAME_GANG = "UPDATE gangs SET name='%newname%' WHERE name LIKE '%oldname%';";
//loaded from config
public static String SQL_HOST;
public static String SQL_DB;
public static String SQL_USER;
public static String SQL_PASS;
public static int SQL_PORT;
public static String SQL_URL;
public static String formatSqlCall(String call) {
return call.replace("%host%", SQL_HOST).replace("%db%", SQL_DB)
.replace("%user%", SQL_USER).replace("%pass%", SQL_PASS)
.replace("%port%", SQL_PORT + "");
}
public static int getPermissionLevel(OfflinePlayer player) {
try {
PreparedStatement statement = SQLConnectionThread.getConnection().prepareStatement(SELECT_PLAYER.replace("%uuid%", player.getUniqueId().toString()));
statement.execute();
ResultSet rs = statement.getResultSet();
if (rs.next()) {
int role = rs.getInt("role");
return role;
}
return 0;
} catch (Exception err) {
err.printStackTrace();
return 0;
}
}
public static void loadGang(String name) {
if (GangManager.getGang(name) != null)
return;
try {
PreparedStatement statement = SQLConnectionThread.getConnection().prepareStatement(SQLVars.GET_GANG.replace("%name%", name));
statement.execute();
ResultSet rs = statement.getResultSet();
if (!(rs.next()))
return;
String members = rs.getString("members");
int friendlyFire = rs.getInt("friendly_fire");
String hideout = rs.getString("hideout");
//parse
List<OfflinePlayer> memberList = Util.fromString(members);
Location hide = LocationUtil.fromString(hideout);
Gang load = new Gang(memberList, name, friendlyFire);
load.setHideout(hide);
GangManager.insertGang(load);
} catch (Exception err) {
err.printStackTrace();
}
}
public static String getGang(OfflinePlayer player) {
try {
PreparedStatement statement = SQLConnectionThread.getConnection().prepareStatement(SELECT_PLAYER.replace("%uuid%", player.getUniqueId().toString()));
statement.execute();
ResultSet rs = statement.getResultSet();
if (rs.next()) {
String gang = rs.getString("gang");
return gang;
}
return null;
} catch (Exception err) {
err.printStackTrace();
return null;
}
}
}