using Gee;

using Xmpp;
using Dino.Entities;

namespace Dino {

public class Register {

    public static async Xep.InBandRegistration.Form get_registration_form(Jid jid) {
        XmppStream stream = new XmppStream();
        stream.add_module(new Tls.Module());
        stream.add_module(new Iq.Module());
        stream.add_module(new Xep.InBandRegistration.Module());
        stream.connect.begin(jid.bare_jid.to_string());

        Xep.InBandRegistration.Form? form = null;
        SourceFunc callback = get_registration_form.callback;
        stream.stream_negotiated.connect(() => {
            if (callback != null) {
                Idle.add((owned)callback);
            }
        });
        Timeout.add_seconds(5, () => {
            if (callback != null) {
                Idle.add((owned)callback);
            }
            return false;
        });
        yield;
        if (stream.negotiation_complete) {
            form = yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).get_from_server(stream, jid);
        }
        return form;
    }

    public static async string submit_form(Jid jid, Xep.InBandRegistration.Form form) {
        return yield form.stream.get_module(Xep.InBandRegistration.Module.IDENTITY).submit_to_server(form.stream, jid, form);
    }
}

}