1package dev.keii.goldenage.commands;
2
3import dev.keii.goldenage.GoldenAge;
4import dev.keii.goldenage.dao.LoginDao;
5import dev.keii.goldenage.dao.UserDao;
6import dev.keii.goldenage.dao.UserNameDao;
7import dev.keii.goldenage.models.Login;
8import dev.keii.goldenage.models.User;
9import dev.keii.goldenage.models.UserName;
10import dev.keii.goldenage.utils.DateUtility;
11import dev.keii.goldenage.utils.PlayerUtility;
12import dev.keii.goldenage.utils.StringSubstitutor;
13import org.bukkit.command.Command;
14import org.bukkit.command.CommandExecutor;
15import org.bukkit.command.CommandSender;
16
17import java.time.ZoneOffset;
18import java.time.format.DateTimeFormatter;
19import java.util.HashMap;
20import java.util.List;
21import java.util.Map;
22
23@SuppressWarnings("unused")
24public class HistoryCommand implements CommandExecutor {
25 private GoldenAge plugin;
26
27 public HistoryCommand(GoldenAge plugin) {
28 this.plugin = plugin;
29 }
30
31 @Override
32 public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
33 LoginDao loginDao = new LoginDao(this.plugin.getDatabaseUtility());
34 UserNameDao userNameDao = new UserNameDao(this.plugin.getDatabaseUtility());
35 UserDao userDao = new UserDao(this.plugin.getDatabaseUtility());
36
37 if (args.length == 0) {
38 List<Login> logins = loginDao.getLogins(10);
39 sender.sendMessage(plugin.getConfig().getCommands().getHistory().getGlobalTitle());
40 for (Login login : logins) {
41 User user = userDao.getUserById(login.getUserId());
42 UserName userName = userNameDao.getUserNameByUser(user);
43 Map<String, Object> params = new HashMap<>();
44 assert userName != null;
45 params.put("player", userName.getName());
46
47 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(plugin.getConfig().getFormatters().getDate());
48 params.put("date", formatter.format(login.getCreatedAt()));
49
50 params.put("duration", DateUtility.getHumanReadableTimeSpan(login.getCreatedAt().toEpochSecond(ZoneOffset.UTC), false));
51
52 StringSubstitutor substitutor = new StringSubstitutor(params);
53 sender.sendMessage(substitutor.replace(plugin.getConfig().getCommands().getHistory().getGlobalRow()));
54 }
55 return true;
56 }
57
58 User user = userDao.getUserByUserName(args[0]);
59 if (user == null) {
60 sender.sendMessage(plugin.getConfig().getCommands().getHistory().getNoUser());
61 return false;
62 }
63
64 List<Login> logins = loginDao.getLoginsByUser(user, 10);
65
66 UserName userName = userNameDao.getUserNameByUser(user);
67 Map<String, Object> params = new HashMap<>();
68 assert userName != null;
69 params.put("player", userName.getName());
70
71 StringSubstitutor substitutor = new StringSubstitutor(params);
72 sender.sendMessage(substitutor.replace(plugin.getConfig().getCommands().getHistory().getPlayerTitle()));
73
74 for (Login login : logins) {
75 userName = userNameDao.getUserNameByUser(user);
76 params = new HashMap<>();
77 assert userName != null;
78 params.put("player", userName.getName());
79
80 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(plugin.getConfig().getFormatters().getDate());
81 params.put("date", formatter.format(login.getCreatedAt()));
82
83 params.put("duration", DateUtility.getHumanReadableTimeSpan(login.getCreatedAt().toEpochSecond(ZoneOffset.UTC), false));
84
85 substitutor = new StringSubstitutor(params);
86 sender.sendMessage(substitutor.replace(plugin.getConfig().getCommands().getHistory().getPlayerRow()));
87 }
88
89 return true;
90 }
91
92}