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.models.Login;
7import dev.keii.goldenage.models.User;
8import dev.keii.goldenage.utils.DateUtility;
9import dev.keii.goldenage.utils.StringSubstitutor;
10import org.bukkit.Bukkit;
11import org.bukkit.command.Command;
12import org.bukkit.command.CommandExecutor;
13import org.bukkit.command.CommandSender;
14import org.bukkit.entity.Player;
15
16import java.time.ZoneOffset;
17import java.util.Arrays;
18import java.util.HashMap;
19import java.util.Map;
20
21@SuppressWarnings("unused")
22public class SeenCommand implements CommandExecutor {
23 private GoldenAge plugin;
24
25 public SeenCommand(GoldenAge plugin) {
26 this.plugin = plugin;
27 }
28
29 @Override
30 public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
31 if (args.length == 0) {
32 sender.sendMessage(plugin.getConfig().getErrors().getInsufficientArguments());
33 return false;
34 }
35
36 UserDao userDao = new UserDao(plugin.getDatabaseUtility());
37 User user = userDao.getUserByUserName(args[0]);
38
39 if (user == null) {
40 sender.sendMessage(plugin.getConfig().getCommands().getSeen().getNoUser());
41 return true;
42 }
43
44 LoginDao loginDao = new LoginDao(plugin.getDatabaseUtility());
45 Login login = loginDao.getLatestLoginByUser(user);
46
47 if (login == null) {
48 sender.sendMessage(plugin.getConfig().getCommands().getSeen().getNoUser());
49 return true;
50 }
51
52 Map<String, Object> params = new HashMap<>();
53 params.put("player", args[0]);
54
55 if (Arrays.stream(Bukkit.getOnlinePlayers()).anyMatch((Player player) -> player.getDisplayName().equalsIgnoreCase(args[0]))) {
56 StringSubstitutor substitutor = new StringSubstitutor(params);
57 sender.sendMessage(substitutor.replace(plugin.getConfig().getCommands().getSeen().getSuccessOnline()));
58 return true;
59 }
60
61 String ago = DateUtility.getHumanReadableTimeSpan(login.getCreatedAt().toEpochSecond(ZoneOffset.UTC), false);
62
63 if (ago.equals("now")) {
64 StringSubstitutor substitutor = new StringSubstitutor(params);
65 sender.sendMessage(substitutor.replace(plugin.getConfig().getCommands().getSeen().getSuccessNow()));
66 } else {
67 params.put("duration", ago);
68
69 StringSubstitutor substitutor = new StringSubstitutor(params);
70 sender.sendMessage(substitutor.replace(plugin.getConfig().getCommands().getSeen().getSuccessDuration()));
71 }
72
73 return true;
74 }
75
76}