<?php
use CRM_Deduper_ExtensionUtil as E;

class CRM_Deduper_Form_Report_MergeConflict extends CRM_Report_Form {

  protected $_addressField = FALSE;

  protected $_emailField = FALSE;

  protected $_summary = NULL;

  protected $_customGroupExtends = array('Membership');

  /**
   * @var int
   */
  protected $summaryOverlayProfileId;
  protected $_customGroupGroupBy = FALSE; function __construct() {

    $this->summaryOverlayProfileId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_UFGroup', 'summary_overlay', 'id', 'name');

    $this->_columns = array(
      'civicrm_merge_conflict' => array(
        'fields' => array(
          'contact_1' => array(
            'title' => E::ts('Contact 1'),
            'default' => TRUE,
            'no_display' => TRUE,
            'required' => TRUE,
          ),
          'contact_2' => array(
            'title' => E::ts('Contact 2'),
            'default' => TRUE,
            'no_display' => TRUE,
            'required' => TRUE,
          ),
          'value_1' => array(
            'title' => E::ts('Value 1'),
            'default' => TRUE,
            /*
            'statistics' => array(
              'count'  => ts('Count')
            ),*/
          ),
          'value_2' => array(
            'title' => E::ts('Value 2'),
            'default' => TRUE,
            /*
            'statistics' => array(
              'count'  => ts('Count')
            ),*/
          ),
          'conflicted_field' => array(
            'title' => E::ts('Conflicted Field'),
            'default' => TRUE,
          ),
          'analysis' => array(
            'title' => E::ts('Analysis'),
            'default' => TRUE,
          ),
        ),
        'filters' => array(
          'value_1' => array(
            'title' => E::ts('Value 1'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'value_2' => array(
            'title' => E::ts('Value 2'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'conflicted_field' => array(
            'title' => E::ts('Conflicted Field'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'analysis' => array(
            'title' => E::ts('Analysis'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
        ),
        'order_bys' => array(
          'value_1' => array(
            'title' => E::ts('Value 1'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'value_2' => array(
            'title' => E::ts('Value 2'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'conflicted_field' => array(
            'title' => E::ts('Conflicted Field'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'analysis' => array(
            'title' => E::ts('Analysis'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
        ),
        'group_bys' => array(
          'value_1' => array(
            'title' => E::ts('Value 1'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'value_2' => array(
            'title' => E::ts('Value 2'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'conflicted_field' => array(
            'title' => E::ts('Conflicted Field'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
          'analysis' => array(
            'title' => E::ts('Analysis'),
            'type' => CRM_Utils_Type::T_STRING,
          ),
        ),
      ),
    );
    parent::__construct();
  }

  function from() {
    $this->_from = 'FROM civicrm_merge_conflict ' . $this->_aliases['civicrm_merge_conflict'];
  }

  /**
   * Alter display of rows.
   *
   * Iterate through the rows retrieved via SQL and make changes for display purposes,
   * such as rendering contacts as links.
   *
   * @param array $rows
   *   Rows generated by SQL, with an array for each row.
   */
  public function alterDisplay(&$rows) {

    $criteriaQueryParams = CRM_Report_Utils_Report::getPreviewCriteriaQueryParams($this->_defaults, $this->_params);
    foreach ($rows as $rowNum => $row) {
      // convert display name to links
      if (array_key_exists('civicrm_merge_conflict_value_1', $row)) {
        $url = CRM_Utils_System::url('civicrm/profile/view',
          'reset=1&snippet=4&gid=' . $this->summaryOverlayProfileId . '&id=' . $row['civicrm_merge_conflict_contact_1'],
          $this->_absoluteUrl
        );
        $rows[$rowNum]['civicrm_merge_conflict_value_1_link'] = $url;
        $rows[$rowNum]['civicrm_merge_conflict_value_1_hover'] = ts("View contact details for this record.");
        $rows[$rowNum]['civicrm_merge_conflict_value_1_class'] ="crm-summary-link";
      }
      if (array_key_exists('civicrm_merge_conflict_value_2', $row)) {
        $url = CRM_Utils_System::url('civicrm/profile/view',
          'reset=1&snippet=4&gid=' . $this->summaryOverlayProfileId . '&id=' . $row['civicrm_merge_conflict_contact_2'],
          $this->_absoluteUrl
        );
        $rows[$rowNum]['civicrm_merge_conflict_value_2_link'] = $url;
        $rows[$rowNum]['civicrm_merge_conflict_value_2_hover'] = ts("View contact details for this record.");
        $rows[$rowNum]['civicrm_merge_conflict_value_1_class'] ="crm-summary-link";
      }
      if (array_key_exists('civicrm_merge_conflict_analysis', $row)) {
        $value = $row['civicrm_merge_conflict_analysis'];
        $url = CRM_Report_Utils_Report::getNextUrl('deduper/mergeconflict',
          "reset=1&force=1&{$criteriaQueryParams}&" .
          "analysis_value={$value}",
          FALSE, NULL
        );
        $rows[$rowNum]['civicrm_merge_conflict_analysis_link'] = $url;
        $rows[$rowNum]['civicrm_merge_conflict_analysis_hover'] = ts('filter by %1', array( $value, 'String'));
      }
      if (array_key_exists('civicrm_merge_conflict_analysis', $row)) {
        $value = $row['civicrm_merge_conflict_analysis'];
        $url = CRM_Report_Utils_Report::getNextUrl('deduper/mergeconflict',
          "reset=1&force=1&{$criteriaQueryParams}&" .
          "analysis_value={$value}",
          FALSE, NULL
        );
        $rows[$rowNum]['civicrm_merge_conflict_conflicted_field_link'] = $url;
        $rows[$rowNum]['civicrm_merge_conflict_analysis_hover'] = ts('filter by %1', array( $value, 'String'));
      }

    }
  }

}
