# -*- coding: utf-8 -*-
module ComplianceChecksHelper
  def fields_for_compliance_check_format(form)
    begin
      render :partial => compliance_check_partial_name(form), :locals => { :form => form }
    rescue ActionView::MissingTemplate
      ""
    end
  end
  def compliance_check_partial_name(form)
    "fields_#{form.object.format.underscore}_compliance_check"
  end
  def compliance_icon( compliance_check)
    return nil unless compliance_check.compliance_check_validation_report
    compliance_check.compliance_check_validation_report.tap do |cct|
      if cct.failed? || cct.any_error_severity_failure?
        return 'icons/link_page_alert.png'
      else
        return 'icons/link_page.png'
      end
    end
  end
  def status_icon( compliance_check_result_status, compliance_check_result_severity )
    if compliance_check_result_status == "uncheck"
      ("").html_safe
    elsif compliance_check_result_status == "ok"
      ("").html_safe
    else
      ("").html_safe
    end
  end
  def test_definition (compliance_check_result_code)
    Rails.application.config.validation_spec + I18n.locale.to_s + "/" + compliance_check_result_code +".html"
  end
  def object_url (referential_id, error)
    location = "/referentials/" + referential_id.to_s
    object_path = error[:source].object_path
    if object_path.first[:type] == "vehicle_journey"
      object_path.delete_at 1
    end
    types, identifiers = object_path.reverse.map { |resource| [ resource[:type], resource[:id] ] }.transpose
    method_name = (['referential'] + types + ['path']).join('_')
    identifiers.unshift referential_id
    return send method_name, *identifiers
  end
  def object_labels_hash (error)
    ### THE error HASH STRUCTURE
    # 1. error[:source]
    #      0..1 file
    #           1 filename
    #           0..1 line_number
    #           0..1 column_number
    #      0..1 objectid
    #      0..1 label
    #      0..  object_path
    #           1 type
    #           1 id
    # 0.. error[:target]
    # 0..1 error[:error_value]
    # 0..1 error[:reference_value]
    object_labels_hash = Hash.new
    object_labels_hash[:source_objectid] = error[:source].objectid if error[:source].objectid.present?
    object_labels_hash[:source_label] = error[:source].label if error[:source].label.present?
    if error[:source].file.present?
      object_labels_hash[:filename] = error[:source].file.filename
      object_labels_hash[:line_number] = error[:source].file.line_number if error[:source].file.line_number.present?
      object_labels_hash[:column_number] = error[:source].file.column_number if error[:source].file.column_number.present?
    end
    if error[:target].present?
      error[:target].each_with_index do |target, index|
        object_labels_hash["target_#{index}_objectid".to_sym] = target[:objectid] if target[:objectid]
        object_labels_hash["target_#{index}_label".to_sym] = target[:label] if target[:label]
      end
    end
    if error[:error_value].present?
      object_labels_hash[:error_value] = error[:error_value]
    end
    if error[:reference_value].present?
      object_labels_hash[:reference_value] = error[:reference_value]
    end
    return object_labels_hash
  end
end