package io.github.olivierlemasle.ca;

import java.io.IOException;

import javax.security.auth.x500.X500Principal;

import org.bouncycastle.asn1.x500.X500Name;

class BcX500NameDnImpl implements DistinguishedName {
  private final X500Name x500Name;

  BcX500NameDnImpl(final X500Name name) {
    this.x500Name = name;
  }

  BcX500NameDnImpl(final String name) {
    this.x500Name = new X500Name(name);
  }
  
  BcX500NameDnImpl(final X500Principal principal) {
    this.x500Name = X500Name.getInstance(principal.getEncoded());
  }

  @Override
  public X500Name getX500Name() {
    return x500Name;
  }

  @Override
  public X500Principal getX500Principal() {
    try {
      return new X500Principal(x500Name.getEncoded());
    } catch (final IOException e) {
      throw new CaException(e);
    }
  }

  @Override
  public byte[] getEncoded() {
    try {
      return x500Name.getEncoded();
    } catch (final IOException e) {
      throw new CaException(e);
    }
  }

  @Override
  public String getName() {
    return x500Name.toString();
  }

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

}