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

include_once 'mkbh_advertisers.features.inc';

/**
 * Implements hook_menu.
 */
function mkbh_advertisers_menu() {
  $menu['admin/config/advertisers'] =  array(
    'title' => t('Advertisers admin page'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('mkbh_advertisers_admin_form'),
    'access arguments' => array('access administration pages'),
    'file' => 'includes/mkbh_advertisers.admin.inc',
    'file path' => drupal_get_path('module', 'kbh_advertisers'),
    'type' => MENU_CALLBACK,
  );

  return $menu;
}

/**
 * Implements hook_theme().
 */
function mkbh_advertisers_theme($existing, $type, $theme, $path) {
  return array(
    'ad_bannerannoncering' => array(
      'variables' => array(
        'description' => NULL,
        'price_table' => NULL,
        'page_views' => NULL
      ),
      'template' => 'templates/bannerannoncering'
    ),
    'ad_sponsoreret_indhold' => array(
      'variables' => array(
        'description' => NULL,
        'price_table' => NULL,
      ),
      'template' => 'templates/sponsoreret-indhold'
    ),
    'ad_nyhedsbrev' => array(
      'variables' => array(
        'description' => NULL,
        'price_table' => NULL,
        'mailchimp_subscribers_count' => NULL
      ),
      'template' => 'templates/nyhedsbrev'
    ),
    'ad_fb_kampagne' => array(
      'variables' => array(
        'description' => NULL,
        'price_table' => NULL,
        'fb_fans_count' => NULL
      ),
      'template' => 'templates/fb-kampagne'
    ),
  );
}

/**
 * Implements hook_block_info().
 */
function mkbh_advertisers_block_info() {
  // Bannerannoncering.
  $blocks['ad_bannerannoncering'] = array(
    'info' => t('Bannerannoncering block'),
  );

  // Sponsoreret indhold.
  $blocks['ad_sponsoreret_indhold'] = array(
    'info' => t('Sponsoreret indhold block'),
  );

  // Nyhedsbrev.
  $blocks['ad_nyhedsbrev'] = array(
    'info' => t('Nyhedsbrev block'),
  );

  // Facebook kampagne.
  $blocks['ad_fb_kampagne'] = array(
    'info' => t('Facebook kampagne block'),
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function mkbh_advertisers_block_view($delta = '') {
  $block = [];

  $dataStore = \Drupal\mkbh_general\DataStore\DataStore::getInstance();

  $ga_last_month_page_views = $dataStore->getGoogleAnalyticsProvider()->getDataStore();
  $mailchimp_subscribers_count = $dataStore->getMailchimpProvider()->getDataStore();
  $fb_fans_count = $dataStore->getFacebookProvider()->getDataStore();

  switch ($delta) {
    case 'ad_bannerannoncering':
      $block['subject'] = t('Bannerannoncering');
      $node = menu_get_object();

      if ($node instanceof stdClass && $node->type == 'advertisers') {
        $w_node = entity_metadata_wrapper('node', $node);
        $price_factor = $w_node->field_ad_pricefactor->value();

        if ($price_factor) {
          $field_collection = entity_metadata_wrapper('field_collection_item', $price_factor);

          if ($field_collection) {
            $global_ad_factor = variable_get('global_ad_factor', 30);

            // Prices.
            $header_price_factor = floatval($field_collection->field_ad_prf_header->value());
            $half_page_sidebar_price_factor = floatval($field_collection->field_ad_prf_half_page->value());
            $rectangle_sidebar_price_factor = floatval($field_collection->field_ad_prf_rectangle_sidebar->value());
            $rectangle_forsiden_price_factor = floatval($field_collection->field_ad_prf_rectangle_forsiden->value());

            // Price table vars.
            $ad_bannerannoncering_price_header = variable_get(
              'ad_bannerannoncering_price_header'
            );
            $ad_bannerannoncering_price_half_page_sidebar = variable_get(
              'ad_bannerannoncering_price_half_page_sidebar'
            );
            $ad_bannerannoncering_price_rectangle_sidebar = variable_get(
              'ad_bannerannoncering_price_rectangle_sidebar'
            );
            $ad_bannerannoncering_price_rectangle_forsiden = variable_get(
              'ad_bannerannoncering_price_rectangle_forsiden'
            );
            $price_table = array(
              array(
                'text' => $ad_bannerannoncering_price_header['value'],
                'price' => $header_price_factor * $ga_last_month_page_views / $global_ad_factor,
                'price_factor' => $header_price_factor
              ),
              array(
                'text' => $ad_bannerannoncering_price_half_page_sidebar['value'],
                'price' => $half_page_sidebar_price_factor * $ga_last_month_page_views / $global_ad_factor,
                'price_factor' => $half_page_sidebar_price_factor
              ),
              array(
                'text' => $ad_bannerannoncering_price_rectangle_sidebar['value'],
                'price' => $rectangle_sidebar_price_factor * $ga_last_month_page_views / $global_ad_factor,
                'price_factor' => $rectangle_sidebar_price_factor
              ),
              array(
                'text' => $ad_bannerannoncering_price_rectangle_forsiden['value'],
                'price' => $rectangle_forsiden_price_factor * $ga_last_month_page_views / $global_ad_factor,
                'price_factor' => $rectangle_forsiden_price_factor
              )
            );
          }
        }
      }

      $ad_bannerannoncering_descritption = variable_get(
        'ad_bannerannoncering_descritption'
      );
      $block['content'] = array(
        '#theme' => 'ad_bannerannoncering',
        '#description' => $ad_bannerannoncering_descritption['value'],
        '#price_table' => isset($price_table) && !empty($price_table) ? $price_table : '',
        '#page_views' => $ga_last_month_page_views
      );
      break;
    case 'ad_sponsoreret_indhold':
      $block['subject'] = t('Sponsoreret indhold');

      // Price table vars.
      $ad_sponsoreret_indhold_sponsoreret_artikel_inkl_produktion_text = variable_get(
        'ad_sponsoreret_indhold_sponsoreret_artikel_inkl_produktion_text'
      );
      $ad_sponsoreret_indhold_sponsoreret_artikel_ekskl_produktion_text = variable_get(
        'ad_sponsoreret_indhold_sponsoreret_artikel_ekskl_produktion_text'
      );
      $ad_sponsoreret_indhold_facebook_post_text = variable_get(
        'ad_sponsoreret_indhold_facebook_post_text'
      );
      $price_table = array(
        'sponsoreret_artikel_inkl' => array(
          'text' => $ad_sponsoreret_indhold_sponsoreret_artikel_inkl_produktion_text['value'],
          'price' => variable_get('ad_sponsoreret_indhold_sponsoreret_artikel_inkl_produktion_price'),
        ),
        'sponsoreret_artikel_ekskl' => array(
          'text' => $ad_sponsoreret_indhold_sponsoreret_artikel_ekskl_produktion_text['value'],
          'price' => variable_get('ad_sponsoreret_indhold_sponsoreret_artikel_ekskl_produktion_price'),
        ),
        'fb' => array(
          'text' => $ad_sponsoreret_indhold_facebook_post_text['value'],
          'price' => variable_get('ad_sponsoreret_indhold_facebook_post_price'),
        )
      );

      $ad_sponsoreret_indhold_descritption = variable_get(
        'ad_sponsoreret_indhold_descritption'
      );
      $block['content'] = array(
        '#theme' => 'ad_sponsoreret_indhold',
        '#description' => $ad_sponsoreret_indhold_descritption['value'],
        '#price_table' => isset($price_table) && !empty($price_table) ? $price_table : '',
      );
      break;
    case 'ad_nyhedsbrev':
      $block['subject'] = t('Nyhedsbrev');

      // Price table vars.
      $ad_nyhedsbrev_bannerannonce_nyhedsbrev_text = variable_get(
        'ad_nyhedsbrev_bannerannonce_nyhedsbrev_text'
      );
      $price_table = array(
        array(
          'text' => $ad_nyhedsbrev_bannerannonce_nyhedsbrev_text['value'],
          'price' => $mailchimp_subscribers_count * variable_get('pris_pr_modtager_af_nyhedsbrev')
        )
      );

      $ad_nyhedsbrev_description = variable_get('ad_nyhedsbrev_description');
      $block['content'] = array(
        '#theme' => 'ad_nyhedsbrev',
        '#description' => $ad_nyhedsbrev_description['value'],
        '#price_table' => isset($price_table) && !empty($price_table) ? $price_table : '',
        '#mailchimp_subscribers_count' => $mailchimp_subscribers_count
      );
      break;
    case 'ad_fb_kampagne':
      $block['subject'] = t('Facebook kampagne');

      // Price table.
      $ad_fb_kampagne_post_magasinet_kbh_fb_side_text = variable_get(
        'ad_fb_kampagne_post_magasinet_kbh_fb_side_text'
      );
      $price_table = array(
        array(
          'text' => $ad_fb_kampagne_post_magasinet_kbh_fb_side_text['value'],
          'price' => $fb_fans_count * variable_get('pris_pr_fb_fan')
        )
      );

      $ad_fb_kampagne_description = variable_get('ad_fb_kampagne_description');
      $block['content'] = array(
        '#theme' => 'ad_fb_kampagne',
        '#description' => $ad_fb_kampagne_description['value'],
        '#price_table' => isset($price_table) && !empty($price_table) ? $price_table : '',
        '#fb_fans_count' => $fb_fans_count
      );
      break;
  }

  return $block;
}

/**
 * Implements hook_block_view_alter().
 */
function mkbh_advertisers_block_view_alter(&$data, $block) {
  $dataStore = \Drupal\mkbh_general\DataStore\DataStore::getInstance();

  $facebookCount = $dataStore->getFacebookProvider()->getDataStore();

  // Custom token substitution.
  switch ($block->delta) {

    // Bannerannoncering block
    case 'ad_bannerannoncering':
      // Description.
      $data['content']['#description'] = str_replace(
        '[ad:global_price_factor]',
        '<span class="global-ad-factor">' . variable_get('global_ad_factor', 30) . '</span>',
        $data['content']['#description']
      );
      break;

    // Sponsoreret indhold block.
    case 'ad_sponsoreret_indhold':
      // Facebook posts.
      $data['content']['#price_table']['fb']['text'] = str_replace(
        '[ad:global_facebook_fans]',
        '<span class="fb-fans-count">' . number_format($facebookCount, 0, ',', '.') . '</span>',
        $data['content']['#price_table']['fb']['text']
      );
      break;

    // Nyhedsbrev block.
    case 'ad_nyhedsbrev':
      // Description.
      $data['content']['#description'] = str_replace(
        '[ad:pris_pr_modtager_af_nyhedsbrev]',
        '<span class="pris-pr-modtager-af-nyhedsbrev">' . number_format(variable_get('pris_pr_modtager_af_nyhedsbrev'), 2, ',', '.') . '</span>',
        $data['content']['#description']
      );
      break;

    // Facebook kampagne.
    case 'ad_fb_kampagne':
      // Description.
      $data['content']['#description'] = str_replace(
        '[ad:pris_pr_fb_fan]',
        '<span class="pris-pr-fb-fan">' . number_format(variable_get('pris_pr_fb_fan'), 2, ',', '.') . '</span>',
        $data['content']['#description']
      );
      break;
  }
}
