lib/mindee/product/fr/payslip/payslip_v2_salary_detail.rb



# frozen_string_literal: true

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

module Mindee
  module Product
    module FR
      module Payslip
        # Detailed information about the earnings.
        class PayslipV2SalaryDetail < Mindee::Parsing::Standard::FeatureField
          include Mindee::Parsing::Standard
          # The amount of the earnings.
          # @return [Float]
          attr_reader :amount
          # The base value of the earnings.
          # @return [Float]
          attr_reader :base
          # The description of the earnings.
          # @return [String]
          attr_reader :description
          # The rate of the earnings.
          # @return [Float]
          attr_reader :rate

          # @param prediction [Hash]
          # @param page_id [Integer, nil]
          def initialize(prediction, page_id)
            super
            @amount = prediction['amount']
            @base = prediction['base']
            @description = prediction['description']
            @rate = prediction['rate']
            @page_id = page_id
          end

          # @return [Hash]
          def printable_values
            printable = {}
            printable[:amount] =
              @amount.nil? ? '' : Parsing::Standard::BaseField.float_to_string(@amount)
            printable[:base] =
              @base.nil? ? '' : Parsing::Standard::BaseField.float_to_string(@base)
            printable[:description] = format_for_display(@description)
            printable[:rate] =
              @rate.nil? ? '' : Parsing::Standard::BaseField.float_to_string(@rate)
            printable
          end

          # @return [Hash]
          def table_printable_values
            printable = {}
            printable[:amount] =
              @amount.nil? ? '' : Parsing::Standard::BaseField.float_to_string(@amount)
            printable[:base] =
              @base.nil? ? '' : Parsing::Standard::BaseField.float_to_string(@base)
            printable[:description] = format_for_display(@description, 36)
            printable[:rate] =
              @rate.nil? ? '' : Parsing::Standard::BaseField.float_to_string(@rate)
            printable
          end

          # @return [String]
          def to_table_line
            printable = table_printable_values
            out_str = String.new
            out_str << format('| %- 13s', printable[:amount])
            out_str << format('| %- 10s', printable[:base])
            out_str << format('| %- 37s', printable[:description])
            out_str << format('| %- 10s', printable[:rate])
            out_str << '|'
          end

          # @return [String]
          def to_s
            printable = printable_values
            out_str = String.new
            out_str << "\n  :Amount: #{printable[:amount]}"
            out_str << "\n  :Base: #{printable[:base]}"
            out_str << "\n  :Description: #{printable[:description]}"
            out_str << "\n  :Rate: #{printable[:rate]}"
            out_str
          end
        end
      end
    end
  end
end