/// Auto-generated with ScanbotSDKCodegenV3. Modifications will be overwritten.
/// Generated from rtu-ui-v2/schemas/mrz/MRZScannerUIResult.yaml

import { GenericDocument } from '../../documents/GenericDocument';
import { ToJsonConfiguration } from '../../utils/json/JsonSerializationTypes';
import { DeepPartial, PartiallyConstructible } from '../../utils/utils';

/**
Configuration of the MRZ RTU UI result.
*/
export class MrzScannerUiResult extends PartiallyConstructible {
  /**
    Raw string value of MRZ.
    */
  public readonly rawMRZ: string;
  /**
    Generic document containing MRZ data.
    */
  public readonly mrzDocument: GenericDocument | null;

  /** @param source {@displayType `DeepPartial<MrzScannerUiResult>`} */
  public constructor(source: DeepPartial<MrzScannerUiResult> = {}) {
    super();
    if (source.rawMRZ !== undefined) {
      this.rawMRZ = source.rawMRZ;
    } else {
      throw new Error('rawMRZ must be present in constructor argument');
    }
    if (source.mrzDocument !== undefined) {
      this.mrzDocument =
        source.mrzDocument != null ? new GenericDocument(source.mrzDocument) : null;
    } else {
      throw new Error('mrzDocument must be present in constructor argument');
    }
  }

  public async serialize(
    config: ToJsonConfiguration = new ToJsonConfiguration()
  ): Promise<DeepPartial<MrzScannerUiResult>> {
    return {
      rawMRZ: this.rawMRZ,
      mrzDocument: this.mrzDocument != null ? await this.mrzDocument.serialize(config) : null,
    };
  }

  private _released: Boolean = false;

  public release() {
    if (this._released) {
      return;
    }
    {
      if (this.mrzDocument != null) {
        this.mrzDocument.release();
      }
    }
    this._released = true;
  }

  public async encodeImages(): Promise<void> {
    if (this.mrzDocument != null) {
      await this.mrzDocument.encodeImages();
    }
  }
}
