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

package com.nimbusds.jwt;

import com.nimbusds.jose.JOSEObject;
import java.util.Map;
import com.nimbusds.jose.Payload;
import java.text.ParseException;
import com.nimbusds.jose.util.Base64URL;
import com.nimbusds.jose.JWEHeader;
import com.nimbusds.jose.shaded.jcip.ThreadSafe;
import com.nimbusds.jose.JWEObject;

@ThreadSafe
public class EncryptedJWT extends JWEObject implements JWT
{
    private static final long serialVersionUID = 1L;
    private JWTClaimsSet claimsSet;
    
    public EncryptedJWT(final JWEHeader header, final JWTClaimsSet claimsSet) {
        super(header, claimsSet.toPayload());
        this.claimsSet = claimsSet;
    }
    
    public EncryptedJWT(final Base64URL firstPart, final Base64URL secondPart, final Base64URL thirdPart, final Base64URL fourthPart, final Base64URL fifthPart) throws ParseException {
        super(firstPart, secondPart, thirdPart, fourthPart, fifthPart);
    }
    
    @Override
    public JWTClaimsSet getJWTClaimsSet() throws ParseException {
        if (this.claimsSet != null) {
            return this.claimsSet;
        }
        final Payload payload = this.getPayload();
        if (payload == null) {
            return null;
        }
        final Map<String, Object> json = payload.toJSONObject();
        if (json == null) {
            throw new ParseException("Payload of JWE object is not a valid JSON object", 0);
        }
        return this.claimsSet = JWTClaimsSet.parse(json);
    }
    
    @Override
    protected void setPayload(final Payload payload) {
        this.claimsSet = null;
        super.setPayload(payload);
    }
    
    public static EncryptedJWT parse(final String s) throws ParseException {
        final Base64URL[] parts = JOSEObject.split(s);
        if (parts.length != 5) {
            throw new ParseException("Unexpected number of Base64URL parts, must be five", 0);
        }
        return new EncryptedJWT(parts[0], parts[1], parts[2], parts[3], parts[4]);
    }
}
