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

package org.bouncycastle.its;

import org.bouncycastle.oer.its.ieee1609dot2.basetypes.SequenceOfPsidSsp;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.PsidSsp;
import org.bouncycastle.oer.its.ieee1609dot2.SequenceOfPsidGroupPermissions;
import org.bouncycastle.oer.its.ieee1609dot2.PsidGroupPermissions;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.CrlSeries;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.HashedId3;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.UINT8;
import org.bouncycastle.oer.its.ieee1609dot2.ToBeSignedCertificate;

public class ITSCertificateBuilder
{
    protected final ToBeSignedCertificate.Builder tbsCertificateBuilder;
    protected final ITSCertificate issuer;
    protected UINT8 version;
    protected HashedId3 cracaId;
    protected CrlSeries crlSeries;
    
    public ITSCertificateBuilder(final ToBeSignedCertificate.Builder builder) {
        this(null, builder);
    }
    
    public ITSCertificateBuilder(final ITSCertificate issuer, final ToBeSignedCertificate.Builder tbsCertificateBuilder) {
        this.version = new UINT8(3);
        this.cracaId = new HashedId3(new byte[3]);
        this.crlSeries = new CrlSeries(0);
        this.issuer = issuer;
        (this.tbsCertificateBuilder = tbsCertificateBuilder).setCracaId(this.cracaId);
        this.tbsCertificateBuilder.setCrlSeries(this.crlSeries);
    }
    
    public ITSCertificate getIssuer() {
        return this.issuer;
    }
    
    public ITSCertificateBuilder setVersion(final int n) {
        this.version = new UINT8(n);
        return this;
    }
    
    public ITSCertificateBuilder setCracaId(final byte[] array) {
        this.cracaId = new HashedId3(array);
        this.tbsCertificateBuilder.setCracaId(this.cracaId);
        return this;
    }
    
    public ITSCertificateBuilder setCrlSeries(final int n) {
        this.crlSeries = new CrlSeries(n);
        this.tbsCertificateBuilder.setCrlSeries(this.crlSeries);
        return this;
    }
    
    public ITSCertificateBuilder setValidityPeriod(final ITSValidityPeriod itsValidityPeriod) {
        this.tbsCertificateBuilder.setValidityPeriod(itsValidityPeriod.toASN1Structure());
        return this;
    }
    
    public ITSCertificateBuilder setCertIssuePermissions(final PsidGroupPermissions... array) {
        this.tbsCertificateBuilder.setCertIssuePermissions(SequenceOfPsidGroupPermissions.builder().addGroupPermission(array).createSequenceOfPsidGroupPermissions());
        return this;
    }
    
    public ITSCertificateBuilder setAppPermissions(final PsidSsp... array) {
        final SequenceOfPsidSsp.Builder builder = SequenceOfPsidSsp.builder();
        for (int i = 0; i != array.length; ++i) {
            builder.setItem(array[i]);
        }
        this.tbsCertificateBuilder.setAppPermissions(builder.createSequenceOfPsidSsp());
        return this;
    }
}
