summaryrefslogtreecommitdiff
path: root/src/main/java/net/uomc/mineshaft/resources/market/MarketManager.java
blob: 3b820b50b7d7711faeafdd41a5a04d0ac81f0c61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package net.uomc.mineshaft.resources.market;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.json.JSONObject;

import com.mouldycheerio.dbot.CustomBot;
import com.mouldycheerio.dbot.util.PeelingUtils;

import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.MessageEmbed.Field;
import net.dv8tion.jda.api.entities.User;
import net.uomc.mineshaft.resources.Resource;
import net.uomc.mineshaft.resources.ResourceManager;
import net.uomc.mineshaft.resources.market.Offer;

public class MarketManager {
    private ResourceManager resourceManager;

    private Map<Guild, List<Offer>> guildOffers = new HashMap<Guild, List<Offer>>();

    private File dataFile;

    private CustomBot bot;

    public MarketManager(net.uomc.mineshaft.resources.ResourceManager resourceManager) {
        this.resourceManager = resourceManager;
        bot = resourceManager.getBot();

        dataFile = new File(resourceManager.getBot().getDatadir(), "market.json");

        load();
    }

    public void load() {
        JSONObject loadJSON = PeelingUtils.loadJSON(dataFile);
        if (loadJSON.has("guilds")) {
            loadJSON.getJSONObject("guilds").keySet().forEach(g -> {
                Guild guild = bot.getClient().getGuildById(g);
                if (guild == null)
                    return;

                guildOffers.put(guild, new ArrayList<Offer>());

                loadJSON.getJSONObject("guilds").getJSONArray(g).forEach(o -> {
                    if (o instanceof JSONObject) {
                        Offer offer = new Offer((JSONObject) o);
                        guildOffers.get(guild).add(offer);
                    }
                });
            });
        }
    }

    public void save() {
        JSONObject jsonObject = new JSONObject();

        JSONObject guilds = new JSONObject();

        guildOffers.forEach((g, l) -> {
            l.forEach(o -> {
                guilds.append(g.getId(), o);
            });
        });
        jsonObject.put("guilds", guilds);

        PeelingUtils.saveJSON(dataFile, jsonObject);
    }

    public List<Offer> getOffers(Guild guild) {
        if (!guildOffers.containsKey(guild)) {
            guildOffers.put(guild, new ArrayList<Offer>());
        }
        return guildOffers.get(guild);
    }

    public Offer getOffer(Guild guild, String id) {
        for (Offer offer : getOffers(guild)) {
            if (id.equals(offer.getID() + "")) {
                return offer;
            }
        }
        return null;
    }

    public void addOffer(Guild guild, Offer offer) {
        getOffers(guild).add(offer);
        processOffers(guild);
        save();
    }

    public void processOffers(Guild guild) {
        // TODO Fix tis
        //Iterator<Offer> iterator = getOffers(guild).iterator();
        //while (iterator.hasNext()) {
        //    Offer offer = iterator.next();

        //    if (l < quantity) {

        //        sendNoLongerValidMessage(offer, seller);
        //        iterator.remove();
        //    }
        //}

        //save();
    }

    private void sendNoLongerValidMessage(Offer offer, User seller) {
        seller.openPrivateChannel().queue(pc -> {
            pc.sendMessage("Your market offer: **" + offer.getAsString(resourceManager) + "** [" + offer.getID() + "] is no longer valid because you no longer have enough resources to complete it.").queue();
        });
    }

    public void removeOffer(Guild guild, Offer o) {
        getOffers(guild).remove(o);
        save();
    }

    public List<Offer> listOffers(Guild guild) {
        return Collections.unmodifiableList(getOffers(guild));
    }

    public List<Field> getEmbedFields(Guild guild) {
        return listOffers(guild).stream().map(
                o -> new Field(
                        "[" + o.getID() + "] "
                                + o.getAsString(resourceManager),
                        "<@" + o.getUserID() + ">", false
                )
        )
                .collect(Collectors.toList());
    }

    public ResourceManager getResourceManager() {
        return resourceManager;
    }

    public void setResourceManager(ResourceManager resourceManager) {
        this.resourceManager = resourceManager;
    }
}