/**
 * 
 */
package at.gv.egiz.pdfas.api.commons;

import at.knowcenter.wag.egov.egiz.pdf.AdobeSignatureHelper;

/**
 * Contains commonly used constants.
 * 
 * @author wprinz
 */
public final class Constants
{

  /**
   * Hidden default constructor.
   */
  private Constants()
  {
    // empty
  }

  /**
   * A binary signature.
   * This value should not be modified due to external dependencies!
   */
  public static final String SIGNATURE_TYPE_BINARY = "binary";

  /**
   * A textual signature.
   * This value should not be modified due to external dependencies!
   */
  public static final String SIGNATURE_TYPE_TEXTUAL = "textual";
  
  /**
   * The default signature type (one of "textual", "binary", "detachedtextual").
   */
  public static final String DEFAULT_SIGNATURE_TYPE = SIGNATURE_TYPE_BINARY;

  /**
   * A "detached" textual signature.
   * 
   * <p>
   * The document text is signed, but instead of returning the pdf with the signature block,
   * the sign result XML of the connector is returned.
   * </p>
   */
  public static final String SIGNATURE_TYPE_DETACHEDTEXTUAL = "detachedtextual";

  /**
   * The signature device moa.
   * This value should not be modified due to external dependencies!
   */
  public static final String SIGNATURE_DEVICE_MOA = "moa";

  /**
   * The signature device bku.
   * This value should not be modified due to external dependencies!
   */
  public static final String SIGNATURE_DEVICE_BKU = "bku";

  /**
   * The signature device a1.
   * This value should not be modified due to external dependencies!
   */
  public static final String SIGNATURE_DEVICE_A1 = "a1";

  /**
   * The signature device MOCCA (online bku).
   * This value should not be modified due to external dependencies!
   */
  public static final String SIGNATURE_DEVICE_MOC = "moc";

  /**
   * Only binary signatures are verified.
   */
  public static final String VERIFY_MODE_BINARY_ONLY = "binaryOnly";

  /**
   * Binary and textual signatures are verified with time optimization.
   * 
   * <p>
   * This mode of operation tries to minimize the numbers of text extractions,
   * which are very time intensive, at the cost of some rare cases, in which some
   * signatures may not be found.
   * </p>
   */
  public static final String VERIFY_MODE_SEMI_CONSERVATIVE = "semiConservative";

  /**
   * Binary and textual signatures are verified.
   */
  public static final String VERIFY_MODE_FULL_CONSERVATIVE = "fullConservative";

  /**
   * All signatures are verified.
   */
  public static final int VERIFY_ALL = -1;

  /**
   * The system property that may be used to declare the pdf-as configuration folder.
   */
  public static final String CONFIG_DIR_SYSTEM_PROPERTY = "pdf-as.work-dir";

  /**
   * The zip file containing the default configuration.
   */
  public static final String DEFAULT_CONFIGURATION_ZIP_RESOURCE = "DefaultConfiguration.zip";
  
  /**
   * The configuration folder for pdf-as within the user's home folder.
   */
  public static final String USERHOME_CONFIG_FOLDER = "PDF-AS";
  
  /**
   * The name of the directory, where temporary files are stored.
   */
  public static final String TEMP_DIR_NAME = "pdfastmp";
  
  public static final String BKU_HEADER_SIGNATURE_LAYOUT = "SignatureLayout";
  
  public static final String ADOBE_SIG_FILTER = AdobeSignatureHelper.ADOBE_SIG_FILTER;

  /**
   * Strict matching mode for placeholder extraction.<br/>
   * If the placeholder with the given id is not found in the document, an exception will be thrown.
   */
  public static final int PLACEHOLDER_MATCH_MODE_STRICT = 0;
  
  /**
   * A moderate matching mode for placeholder extraction.<br/>
   * If the placeholder with the given id is not found in the document, the first placeholder without an id will be taken.<br/>
   * If there is no such placeholder, the signature will be placed as usual, according to the pos parameter of the signature profile used.
   */
  public static final int PLACEHOLDER_MATCH_MODE_MODERATE = 1;
  
  /**
   * A more lenient matching mode for placeholder extraction.<br/>
   * If the placeholder with the given id is not found in the document, the first found placeholder will be taken, regardless if it has an id set, or not.<br/>
   * If there is no placeholder at all, the signature will be placed as usual, according to the pos parameter of the signature profile used.
   */
  public static final int PLACEHOLDER_MATCH_MODE_LENIENT = 2;
  
  /**
   * Identifier for QR based placeholders.
   */
  public static final String QR_PLACEHOLDER_IDENTIFIER = "PDF-AS-POS";
  
}