package cat.nyaa.nyaautils.particle;

import cat.nyaa.nyaacore.configuration.ISerializable;
import cat.nyaa.nyaautils.NyaaUtils;
import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class ParticleSet implements ISerializable {
    @Serializable(manualSerialization = true)
    public List<ParticleData> contents = new ArrayList<>();
    @Serializable
    private int id;
    @Serializable
    private String name;
    @Serializable
    private String author;
    @Serializable
    private ParticleType type;

    @Override
    public void deserialize(ConfigurationSection config) {
        contents.clear();
        ISerializable.deserialize(config, this);
        if (config.isConfigurationSection("contents")) {
            ConfigurationSection list = config.getConfigurationSection("contents");
            for (String index : list.getKeys(false)) {
                ParticleData p = new ParticleData();
                p.deserialize(list.getConfigurationSection(index));
                contents.add(p);
            }
        }
    }

    @Override
    public void serialize(ConfigurationSection config) {
        ISerializable.serialize(config, this);
        config.set("contents", null);
        ConfigurationSection c = config.createSection("contents");
        int i = 0;
        for (ParticleData p : contents) {
            p.serialize(c.createSection(String.valueOf(i)));
            i++;
        }
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public UUID getAuthor() {
        return UUID.fromString(author);
    }

    public void setAuthor(UUID author) {
        this.author = author.toString();
    }

    public ParticleType getType() {
        return type;
    }

    public void setType(ParticleType type) {
        this.type = type;
    }

    public void sendParticle(UUID sender, Location loc, long time) {
        int i = 0;
        ParticleLimit limit = NyaaUtils.instance.cfg.particlesLimits.get(type);
        for (ParticleData data : contents) {
            if (i < limit.getSet()) {
                data.sendParticle(sender, loc, limit, time);
            } else {
                return;
            }
            i++;
        }
    }
}