<?php
/**
 * @file
 * Code for the MKBH: Visioner feature.
 */

include_once 'mkbh_visioner.features.inc';

/**
 * Implements hook_menu().
 */
function mkbh_visioner_menu() {
  // Visioner admin.
  $items['admin/config/visioner'] = array(
    'title' => 'Visioner admin page',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('mkbh_visioner_admin_form'),
    'access arguments' => array('access administration pages'),
    'file' => 'includes/mkbh_visioner.admin.inc',
    'file path' => drupal_get_path('module', 'mkbh_visioner'),
    'type' => MENU_CALLBACK,
  );

  // Visioner see more.
  $items['visioner-see-more'] = array(
    'page callback' => 'mkbh_visioner_see_more',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );

  // Visioner popup.
  $items['visioner-popup/%ctools_js'] = array(
    'page callback' => 'mkbh_visioner_popup_callback',
    'page arguments' => array(1),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );

  return $items;
}

/**
 * Implements hook_init().
 */
function mkbh_visioner_init() {
  // Add custom js file to visioner page.
  if (current_path() == 'visioner') {
    drupal_add_js(drupal_get_path('module', 'mkbh_visioner') . '/js/mkbh_visioner.js', array('scope' => 'footer', 'weight' => 10));
  }

  // settings for visioner popup.
  drupal_add_js(array(
    'visioner-popup-modal' => array(
      'modalSize' => array(
        'type' => 'scale',
        'width' => 0.6,
        'height' => 0.55
      ),
      'modalOptions' => [
        'opacity' => .5,
        'background-color' => '#000',
      ],
      'modalClass' => 'visioner',
      'animation' => 'fadeIn',
      'animationSpeed' => 'fast',
    ),
  ), 'setting');
}

/**
 * Implements hook_theme().
 */
function mkbh_visioner_theme($existing, $type, $theme, $path) {
  return array(
    'redaktionens_udvalgte' => array(
      'variables' => array(
        'title' => NULL,
        'subtitle' => NULL,
        'location' => NULL,
        'body' => NULL,
        'chart' => NULL,
        'path' => NULL
      ),
      'template' => 'templates/redaktionens-udvalgte'
    ),
    'gode_visioner' => array(
      'variables' => array(
        'title' => NULL,
        'body' => NULL
      ),
      'template' => 'templates/gode-visioner'
    ),
    'see_more_link' => array(
      'variables' => array(
        'text' => NULL,
        'category' => NULL
      ),
      'template' => 'templates/see-more-link'
    ),
    'visioner_popup' => array(
      'variables' => array(
        'title' => NULL,
        'first_col' => NULL,
        'second_col' => NULL
      ),
      'template' => 'templates/visioner-popup'
    )
  );
}

/**
 * Implements hook_block_info().
 */
function mkbh_visioner_block_info() {
  $blocks['redaktionens_udvalgte'] = array(
    'info' => t('Redaktionens Udvalgte'),
  );

  $blocks['gode_visioner'] = array(
    'info' => t('Gode visioner'),
  );

  $blocks['flere_visioner'] = array(
    'info' => t('Flere visioner'),
  );

  $blocks['flere_popular'] = array(
    'info' => t('Flere popular'),
  );

  $blocks['visioner_popup'] = array(
    'info' => t('Visioner popup')
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function mkbh_visioner_block_view($delta = '') {
  $block = array();
  switch ($delta) {
    case 'redaktionens_udvalgte':
      $block['subject'] = t('Redaktionens Udvalgte');
      $content = '';

      // Check if admin set node for Redaktionens Udvalgte block.
      if (variable_get('redaktionens_udvalgte_nid')) {
        $node = node_load(variable_get('redaktionens_udvalgte_nid'));
        $w_node = entity_metadata_wrapper('node', $node);

        $location = $w_node->field_article_city_district->value();

        $content = theme('redaktionens_udvalgte',
          array(
            'title' => $w_node->label(),
            //'subtitle' => $w_node->field_article_sub_headline->value(),
            'location' => $location ? $location->name : '',
            'chart' => rate_embed($node, 'vision_rate', RATE_DISABLED),
            'path' => drupal_get_path_alias('node/' . $node->nid)
          )
        );
      }

      $block['content'] = $content;
      break;

    case 'gode_visioner':
      $block['content'] = array(
        '#theme' => 'gode_visioner',
        '#title' => variable_get('gv_title'),
        '#body' => variable_get('gv_body')
      );
      break;

    case 'flere_visioner':
      $block['content'] = array(
        '#theme' => 'see_more_link',
        '#text' => t('flere visioner'),
        '#category' => 'seneste'
      );
      break;

    case 'flere_popular':
      $block['content'] = array(
        '#theme' => 'see_more_link',
        '#text' => t('flere populære'),
        '#category' => 'popular'
      );
      break;

    case 'visioner_popup':
      $visioner_popup_title = variable_get('visioner_popup_title');
      $visioner_popup_first_col = variable_get('visioner_popup_first_col');
      $visioner_popup_second_col = variable_get('visioner_popup_second_col');
      $block['content'] = array(
        '#theme' => 'visioner_popup',
        '#title' => $visioner_popup_title['value'],
        '#first_col' => $visioner_popup_first_col['value'],
        '#second_col' => $visioner_popup_second_col['value'],
      );
      break;
  }

  return $block;
}

/**
 * Menu route callback for visioner-see-more.
 */
function mkbh_visioner_see_more() {
  $output = array();

  $visionerBlocksOffsetMap = $_GET['visionerBlocksOffsetMap'];
  $clickCount = $_GET['clickCount'];
  $visibleItems = $_GET['visibleItems'];

  if (isset($clickCount) && isset($visionerBlocksOffsetMap)  && isset($visibleItems)) {
    if (!empty($visionerBlocksOffsetMap) && is_array($visionerBlocksOffsetMap)) {
      foreach($visionerBlocksOffsetMap as $display_name => $offset) {
        // Get display with new offset.
        $view = views_get_view('cover_visioner');
        $view->set_display($display_name);
        $view->set_offset($offset + $clickCount * $visibleItems);
        $view->pre_execute();
        $content = $view->render($display_name);

        $output[$display_name] = $view->result ? $content : '';
      }
    }
  }

  print(json_encode($output));
  drupal_exit();
}

/**
 * Menu route callback for Visioner popup.
 */
function mkbh_visioner_popup_callback($js = NULL) {
  if (!$js) {
    drupal_goto('visioner');
  } else {
    ctools_include('ajax');
    ctools_include('modal');
    ctools_modal_add_js();

    $popup_block = module_invoke('mkbh_visioner', 'block_view', 'visioner_popup');
    $output = drupal_render($popup_block['content']);

    return ctools_modal_render('', $output) ;
  }
}
