// 
// Decompiled by Procyon v0.6.0
// 

package com.nimbusds.jose;

import java.text.ParseException;
import java.util.Iterator;
import com.nimbusds.jose.util.JSONObjectUtils;
import java.util.Set;
import java.util.Objects;
import java.util.Map;
import com.nimbusds.jose.shaded.jcip.Immutable;

@Immutable
public final class UnprotectedHeader
{
    private final Map<String, Object> params;
    
    private UnprotectedHeader(final Map<String, Object> params) {
        Objects.requireNonNull(params);
        this.params = params;
    }
    
    public String getKeyID() {
        return this.params.get("kid");
    }
    
    public Object getParam(final String name) {
        return this.params.get(name);
    }
    
    public Set<String> getIncludedParams() {
        return this.params.keySet();
    }
    
    public Map<String, Object> toJSONObject() {
        final Map<String, Object> o = JSONObjectUtils.newJSONObject();
        o.putAll(this.params);
        return o;
    }
    
    public static UnprotectedHeader parse(final Map<String, Object> jsonObject) throws ParseException {
        if (jsonObject == null) {
            return null;
        }
        Builder header = new Builder();
        for (final String name : jsonObject.keySet()) {
            header = header.param(name, jsonObject.get(name));
        }
        return header.build();
    }
    
    public static class Builder
    {
        private final Map<String, Object> params;
        
        public Builder() {
            this.params = JSONObjectUtils.newJSONObject();
        }
        
        public Builder keyID(final String kid) {
            this.params.put("kid", kid);
            return this;
        }
        
        public Builder param(final String name, final Object value) {
            this.params.put(name, value);
            return this;
        }
        
        public UnprotectedHeader build() {
            return new UnprotectedHeader(this.params, null);
        }
    }
}
