/**
 * [アクション] 動画再生画面を生成し、クライアントに送信する
 *
 * 注意: exitを呼ぶので、処理の最後に呼び出すこと
 *
 * @return void
 */
function plugin_movieviewer_action_show_movie()
{
    date_default_timezone_set("Asia/Tokyo");
    $settings = MovieViewerSettings::loadFromYaml(PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS);
    $cf_settings = $settings->aws['cloud_front'];
    $target = array("course" => filter_input(INPUT_POST, "course"), "session" => filter_input(INPUT_POST, "session"), "chapter" => filter_input(INPUT_POST, "chapter"));
    try {
        plugin_movieviewer_validate_course_id($target["course"]);
    } catch (MovieViewerValidationException $ex) {
        plugin_movieviewer_abort("指定した内容に誤りがあります。");
    }
    try {
        plugin_movieviewer_validate_session_id($target["session"]);
    } catch (MovieViewerValidationException $ex) {
        plugin_movieviewer_abort("指定した内容に誤りがあります。");
    }
    try {
        plugin_movieviewer_validate_chapter_id($target["chapter"]);
    } catch (MovieViewerValidationException $ex) {
        plugin_movieviewer_abort("指定した内容に誤りがあります。");
    }
    $user_id = plugin_movieviewer_get_auth_manager()->getUserId();
    $current_user = plugin_movieviewer_get_user_repository()->findById($user_id);
    $viewing_periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($user_id);
    $canView = $viewing_periods->canView($target['course'], $target['session']);
    if (!$canView) {
        plugin_movieviewer_abort("この動画は見ることができません。");
    }
    $builder = new MovieViewerAwsCloudFrontUrlBuilder($cf_settings);
    $signed_path_rtmp = $builder->buildVideoRTMPUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60);
    $signed_path_hls = $builder->buildVideoHLSUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60);
    $base_uri = plugin_movieviewer_get_base_uri();
    pkwk_common_headers();
    header('Content-type: text/html');
    print <<<EOC
    <video id="my_video_1" class="video-js vjs-default-skin vjs-big-play-centered" preload="auto" controls width="800" height="500"
           data-setup='{"techOrder":["flash","html5"]}'>
        <source src="rtmp://{$cf_settings['host']['video']['rtmp']}/cfx/st/&mp4:{$signed_path_rtmp}" type="rtmp/mp4">
        <source src="{$signed_path_hls}" type="application/x-mpegURL">
    </video>
    <p>
    最大化ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-maximize.png"> は再生ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-play.png"> を押した後、表示されます。
    </p>
EOC;
    exit;
}
function plugin_movieviewer_get_current_user()
{
    $user_id = plugin_movieviewer_get_auth_manager()->getUserId();
    return plugin_movieviewer_get_user_repository()->findById($user_id);
}
/**
 * プラグイン規定関数::アクション型で呼び出された場合の処理
 * ログアウトする
 *
 * 例: http://host:port/index.php?cmd=movieviewer_logout
 * 
 * @return array ページ名、画面(html)
 */
function plugin_movieviewer_logout_action()
{
    plugin_movieviewer_get_auth_manager()->logout();
    return array("msg" => '会員ログアウト', "body" => "ログアウトしました。");
}
/**
 * 認証画面を生成する
 *
 * @param string $messages 認証画面に表示するメッセージ
 *
 * @return string 画面(html)
 */
function plugin_movieviewer_auth_generate_signin_page($messages)
{
    $manager = plugin_movieviewer_get_auth_manager();
    $manager->logout();
    global $vars, $defaultpage;
    $page = isset($vars['page']) ? $vars['page'] : $defultpage;
    $show_messages = isset($_GET['messages']) ? plugin_movieviewer_hsc(filter_input(INPUT_GET, 'messages')) : '';
    $messages = "";
    if ($show_messages) {
        $messages = "ユーザ名またはパスワードに誤りがあります。";
    }
    $body_messages = "";
    if ($messages != null && $messages != "") {
        $body_messages = <<<TEXT
        <div class="ui-state-error ui-corner-all" style="margin: 5px;">
        <p>
            <span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
            {$messages}
        </p>
        </div>
TEXT;
    }
    $hsc = "plugin_movieviewer_hsc";
    $input_csrf_token = "plugin_movieviewer_generate_input_csrf_token";
    $auth_manager = plugin_movieviewer_get_auth_manager();
    $label_for_username = $hsc($auth_manager->getLabelForUserName());
    $body = <<<TEXT
    <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
    <link href="https://code.jquery.com/ui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet">
    <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet">
    <h2>会員認証</h2>
    <p>以下に、{$label_for_username}、パスワードを入力し「ログインする」ボタンを押して下さい。</p>
    {$body_messages}
    <form class="movieviewer" action="index.php?{$page}" METHOD="POST">
        <fieldset>
            <label for="movieviewer_user">{$label_for_username}</label>
            <input type="text" id="movieviewer_user" name="movieviewer_user" size=50>
        </fieldset>
        <fieldset>
            <label for="movieviewer_password">パスワード</label>
            <input type="password" id="movieviewer_password" name="movieviewer_password" size=50>
        </fieldset>
        {$input_csrf_token()}
        <button class="movieviewer-button" type="submit">ログインする</button>
    </form>
TEXT;
    return $body;
}
/**
 * [アクション] パスワードリセット画面を生成する
 *
 * @param string          $token    パスワードリセットトークン
 * @param MovieViewerUser $user     対象ユーザ
 * @param string          $messages エラーメッセージ
 *
 * @return array ページ名, 画面(html)
 */
function plugin_movieviewer_reset_password_action_confirm_generate_page($token, $user, $messages = "")
{
    $manager = plugin_movieviewer_get_auth_manager();
    $manager->logout();
    $page = plugin_movieviewer_get_current_page();
    $body_messages = "";
    if ($messages !== null && $messages !== "") {
        $body_messages = <<<TEXT
        <div class="ui-state-error ui-corner-all" style="margin: 5px;">
        <p>
            <span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
            {$messages}
        </p>
        </div>
TEXT;
    }
    $hsc = "plugin_movieviewer_hsc";
    $input_csrf_token = "plugin_movieviewer_generate_input_csrf_token";
    $body = <<<TEXT
    <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
    <link href="https://code.jquery.com/ui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet">
    <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet">
    <h2>パスワードのリセット</h2>
    <div><span style="font-size:1.2em;font-weight:bold;">{$hsc($user->describe())}様</span></div>
    <p>以下に、パスワードを入力し「パスワードをリセットする」ボタンを押して下さい。</p>
    {$body_messages}
    <form class="movieviewer" action="index.php?cmd=movieviewer_reset_password" METHOD="POST">
        <input type="hidden" name="ope_type" value="reset">
        <input type="hidden" name="page" value="{$hsc($page)}">
        <input type="hidden" name="token" value="{$hsc($token->id)}">
        {$input_csrf_token()}
        <fieldset>
            <label for="movieviewer_password">パスワード</label>
            <input type="password" id="movieviewer_password" name="movieviewer_password" size=50>
        </fieldset>
        <fieldset>
            <label for="movieviewer_password_confirm">パスワード(確認)</label>
            <input type="password" id="movieviewer_password_confirm" name="movieviewer_password_confirm" size=50>
        </fieldset>
        <button class="movieviewer-button" type="submit">パスワードをリセットする</button>
    </form>
TEXT;
    return $body;
}