<?php
include dirname(__FILE__) . '/nocache.php';

include dirname(__FILE__) . '/dbconfig.php';
include dirname(__FILE__) . '/error.php';
include dirname(__FILE__) . '/utils.php';
include dirname(__FILE__) . '/const.php';

include dirname(__FILE__) . '/session.php';

function get_period_master($dbh) {
  $sql = "SELECT * FROM period_master WHERE del_flg='0'";
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  $list = $stmt->fetchAll(PDO::FETCH_ASSOC);
  $result = array();
  foreach( $list as $item ) {
    $result[$item['id']] = $item;
  }
  return $result;
}

function get_capacity_master($dbh) {
  $sql = "SELECT id,gb FROM capacity_master WHERE del_flg='0'";
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  $list = $stmt->fetchAll(PDO::FETCH_ASSOC);
  $result = array();
  foreach( $list as $item ) {
    $result[$item['id']] = $item['gb'];
  }
  return $result;
}

function get_session_master($dbh) {
  $sql = "SELECT id,session FROM session_master WHERE del_flg='0'";
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  $list = $stmt->fetchAll(PDO::FETCH_ASSOC);
  $result = array();
  foreach( $list as $item ) {
    $result[$item['id']] = $item['session'];
  }
  return $result;
}

function check()
{
    $POST = json_decode(file_get_contents('php://input'), true);

    check_session();

    setTextDomain('myapps');

    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'");
    $dbh = new PDO(DB_DSN, DB_USER, DB_PASSWORD, $options);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    setTimezone($dbh);

    error_reporting(E_ALL & ~E_NOTICE);

    //入力されたアクティベーションコードの情報取得
    $sql = <<<EOF
    SELECT 
      a.id,
      a.code, 
      a.plan_id,
      p.name as plan_name,
      d.days as period,
      IF(cm.capacity < cm2.capacity, cm2.gb, cm.gb) as capacity,
      IF(u.use_data > IF(cm.capacity < cm2.capacity, cm2.capacity, cm.capacity), 1, 0) as over_flg,
      IF(GREATEST(
        NOW(),
        u.freeend_date,
        IFNULL(
          (SELECT MAX(end_date)
            FROM activation
            WHERE used = u.id
            AND del_flg = 0
            AND end_date IS NOT NULL),
          NOW()
        )) > NOW(), 1, 0) as enable_future
    from activation as a 
    INNER JOIN
      userdata as u
    LEFT OUTER JOIN
      capacity_master as cm
    ON
      cm.id = u.capacity
    AND
      cm.del_flg = 0
    LEFT OUTER JOIN
      capacity_master as cm2
    ON
      cm2.id = a.capacity
    AND
      cm2.del_flg = 0
    LEFT OUTER JOIN
      period_master as d
    ON
      d.id = a.period
    AND
      d.del_flg = 0
    LEFT OUTER JOIN
      plan_master as p
    ON
      p.id = a.plan_id
    AND
      p.del_flg = 0
    WHERE 
      u.id = :uid
    and
      (a.linkuser=0 or a.linkuser=:uid) 
    and 
      a.exp_flg=0 
    and 
      a.del_flg=0
    and
      a.used = 0
    and
      a.code = :keys
EOF;
    $stmt = $dbh->prepare($sql);
    $params = array(':keys' => $POST["key"] , ':uid' => $_SESSION['usr_id']);
    $stmt->execute($params);
    $key_result = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$key_result) {
        return [
            'result' => 'NG',
            'keymessage' => _('アクティベーションコードが正しくありません。')
        ];
    }

    $sql = <<<EOF
    SELECT
      a.plan_id,
      p.name as plan_name,
      IF(cm.capacity < cm2.capacity, cm2.gb, cm.gb) as capacity
    FROM
      userdata as u
    LEFT OUTER JOIN
      activation as a
    ON
      a.used = u.id
    AND
      a.plan_id > 0
    AND
      a.del_flg = 0
    AND
      a.start_date <= NOW()
    AND
      NOW() < a.end_date
    INNER JOIN
      capacity_master as cm
    ON
      cm.id = IFNULL(a.capacity, 0)
    AND
      cm.del_flg = 0
    INNER JOIN
      capacity_master as cm2
    ON
      cm2.id = u.capacity
    AND
      cm2.del_flg = 0
    LEFT OUTER JOIN
      plan_master as p
    ON
      p.id = a.plan_id
    AND
      p.del_flg = 0
    WHERE
      u.id = :uid
EOF;
    $stmt = $dbh->prepare($sql);
    $params = array(':uid' => $_SESSION['usr_id']);
    $stmt->execute($params);
    $current = $stmt->fetch(PDO::FETCH_ASSOC);

    $plan_id = null;
    if($key_result['plan_id'] > 0) {
      $plan_id = $key_result['plan_id'];
    }

    if ($current['capacity'] > $key_result['capacity']) {
      return [
        'upgrade' => false,
        'downgrade' => true,
        'over_flg' => $key_result['over_flg'],
        'period' => $key_result['period'],
        'plan_id' => $plan_id,
        'plan_name' => $key_result['plan_name'],
        'current_plan_name' => $current['plan_name'],
        'enable_future' => $key_result['enable_future']
      ];
    }
    if ($current['capacity'] < $key_result['capacity']) {
      return [
        'upgrade' => true,
        'downgrade' => false,
        'over_flg' => $key_result['over_flg'],
        'period' => $key_result['period'],
        'plan_id' => $plan_id,
        'plan_name' => $key_result['plan_name'],
        'current_plan_name' => $current['plan_name'],
        'enable_future' => $key_result['enable_future']
      ];
    }
    return [
      'upgrade' => false,
      'downgrade' => false,
      'over_flg' => $key_result['over_flg'],
      'period' => $key_result['period'],
      'plan_id' => $plan_id,
      'plan_name' => $key_result['plan_name'],
      'current_plan_name' => $current['plan_name'],
      'enable_future' => $key_result['enable_future']
    ];
}

wrap(function() {
	echo json_encode(check());
});
