package discord.jar;

import org.apache.commons.lang3.StringEscapeUtils;
import org.json.JSONArray;
import org.json.JSONObject;

public class WebhookImpl implements Webhook {
    private String name;
    private String avatar;
    private String token;
    private String id;
    private String groupId;
    private DiscordAPIImpl api;

    public WebhookImpl(String name, String avatar, String token, String id, String groupId, DiscordAPIImpl api) {
        this.name = name;
        this.avatar = avatar;
        this.token = token;
        this.id = id;
        this.groupId = groupId;
        this.api = api;
    }

    @Override
    public String toString() {
        return name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public String getGroupId() {
        return groupId;
    }

    @Override
    public void changeName(String name) {
        PacketBuilder pb = new PacketBuilder(api);
        pb.setType(RequestType.PATCH);
        pb.setData(new JSONObject().put("name", StringEscapeUtils.escapeJson(name)).toString());
        pb.setUrl("https://discordapp.com/api/webhooks/" + id);
        pb.makeRequest();
    }

    @Override
    public void changeAvatar(String avatar) {
        PacketBuilder pb = new PacketBuilder(api);
        pb.setType(RequestType.PATCH);
        pb.setData(new JSONObject().put("avatar", StringEscapeUtils.escapeJson(avatar)).toString());
        pb.setUrl("https://discordapp.com/api/webhooks/" + id);
        System.out.println(pb.makeRequest());
    }

    @Override
    public void execute(String content) {
        execute(content, getName(), getAvatarUrl(), false);
    }

    @Override
    public void execute(String content, String username) {
        execute(content, username, getAvatarUrl(), false);
    }

    @Override
    public void execute(String content, String username, String avatarUrl) {
        execute(content, username, avatarUrl, false);
    }

    @Override
    public void execute(String content, String username, String avatarUrl, boolean tts) {
        execute(content, new Embed[0], username, avatarUrl, tts);
    }

    @Override
    public void execute(Embed[] embeds) {
        execute(embeds, getName(), getAvatarUrl());
    }

    @Override
    public void execute(Embed[] embeds, String username) {
        execute(embeds, username, getAvatarUrl());
    }

    @Override
    public void execute(Embed[] embeds, String username, String avatarUrl) {
        execute("", embeds, username, avatarUrl, false);
    }

    public void execute(String content, Embed[] embeds, String username, String avatarUrl, boolean tts) {
        PacketBuilder pb = new PacketBuilder(api);
        pb.setType(RequestType.POST);
        JSONArray jsonEmbeds = new JSONArray();
        for (Embed embed : embeds) jsonEmbeds.put(embed.toJson());
        pb.setData(new JSONObject().put("content", content).put("embeds", jsonEmbeds).put("username", username).put("avatar_url", avatarUrl).put("tts", tts).toString());
        pb.setUrl("https://discordapp.com/api/webhooks/" + id + "/" + token);
        System.out.println(pb.makeRequest());
    }

    public String getAvatar() {
        return avatar;
    }

    @Override
    public String getAvatarUrl() {
        return avatar == null ? "https://cdn.discordapp.com/embed/avatars/0.png" : "https://cdn.discordapp.com/avatars/" + id + "/" + avatar;
    }

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

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
}