lib/mindee/product/fr/id_card/id_card_v2_document.rb



# frozen_string_literal: true

require_relative '../../../parsing'

module Mindee
  module Product
    module FR
      module IdCard
        # Carte Nationale d'Identité API version 2.0 document data.
        class IdCardV2Document < Mindee::Parsing::Common::Prediction
          include Mindee::Parsing::Standard
          # The alternate name of the card holder.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :alternate_name
          # The name of the issuing authority.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :authority
          # The date of birth of the card holder.
          # @return [Mindee::Parsing::Standard::DateField]
          attr_reader :birth_date
          # The place of birth of the card holder.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :birth_place
          # The card access number (CAN).
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :card_access_number
          # The document number.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :document_number
          # The expiry date of the identification card.
          # @return [Mindee::Parsing::Standard::DateField]
          attr_reader :expiry_date
          # The gender of the card holder.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :gender
          # The given name(s) of the card holder.
          # @return [Array<Mindee::Parsing::Standard::StringField>]
          attr_reader :given_names
          # The date of issue of the identification card.
          # @return [Mindee::Parsing::Standard::DateField]
          attr_reader :issue_date
          # The Machine Readable Zone, first line.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :mrz1
          # The Machine Readable Zone, second line.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :mrz2
          # The Machine Readable Zone, third line.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :mrz3
          # The nationality of the card holder.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :nationality
          # The surname of the card holder.
          # @return [Mindee::Parsing::Standard::StringField]
          attr_reader :surname

          # @param prediction [Hash]
          # @param page_id [Integer, nil]
          def initialize(prediction, page_id)
            super
            @alternate_name = Parsing::Standard::StringField.new(
              prediction['alternate_name'],
              page_id
            )
            @authority = Parsing::Standard::StringField.new(
              prediction['authority'],
              page_id
            )
            @birth_date = Parsing::Standard::DateField.new(
              prediction['birth_date'],
              page_id
            )
            @birth_place = Parsing::Standard::StringField.new(
              prediction['birth_place'],
              page_id
            )
            @card_access_number = Parsing::Standard::StringField.new(
              prediction['card_access_number'],
              page_id
            )
            @document_number = Parsing::Standard::StringField.new(
              prediction['document_number'],
              page_id
            )
            @expiry_date = Parsing::Standard::DateField.new(
              prediction['expiry_date'],
              page_id
            )
            @gender = Parsing::Standard::StringField.new(
              prediction['gender'],
              page_id
            )
            @given_names = [] # : Array[Parsing::Standard::StringField]
            prediction['given_names'].each do |item|
              @given_names.push(Parsing::Standard::StringField.new(item, page_id))
            end
            @issue_date = Parsing::Standard::DateField.new(
              prediction['issue_date'],
              page_id
            )
            @mrz1 = Parsing::Standard::StringField.new(prediction['mrz1'], page_id)
            @mrz2 = Parsing::Standard::StringField.new(prediction['mrz2'], page_id)
            @mrz3 = Parsing::Standard::StringField.new(prediction['mrz3'], page_id)
            @nationality = Parsing::Standard::StringField.new(
              prediction['nationality'],
              page_id
            )
            @surname = Parsing::Standard::StringField.new(
              prediction['surname'],
              page_id
            )
          end

          # @return [String]
          def to_s
            given_names = @given_names.join("\n #{' ' * 15}")
            out_str = String.new
            out_str << "\n:Nationality: #{@nationality}".rstrip
            out_str << "\n:Card Access Number: #{@card_access_number}".rstrip
            out_str << "\n:Document Number: #{@document_number}".rstrip
            out_str << "\n:Given Name(s): #{given_names}".rstrip
            out_str << "\n:Surname: #{@surname}".rstrip
            out_str << "\n:Alternate Name: #{@alternate_name}".rstrip
            out_str << "\n:Date of Birth: #{@birth_date}".rstrip
            out_str << "\n:Place of Birth: #{@birth_place}".rstrip
            out_str << "\n:Gender: #{@gender}".rstrip
            out_str << "\n:Expiry Date: #{@expiry_date}".rstrip
            out_str << "\n:Mrz Line 1: #{@mrz1}".rstrip
            out_str << "\n:Mrz Line 2: #{@mrz2}".rstrip
            out_str << "\n:Mrz Line 3: #{@mrz3}".rstrip
            out_str << "\n:Date of Issue: #{@issue_date}".rstrip
            out_str << "\n:Issuing Authority: #{@authority}".rstrip
            out_str[1..].to_s
          end
        end
      end
    end
  end
end