/*
 *
 *    Self Test
 *        Written by Kenichi Maehashi
 *
 *    Copyright (C) 2007-2017 Kenichi Maehashi, All rights reserved.
 *
 *    Contact:
 *        webmaster@kenichimaehashi.com
 *        http://www.KenichiMaehashi.com/
 *
 */


// *******************************************************************************
//  MAIN
// *******************************************************************************


//  *********** variables used in test process ***********
var testInstallation, testVersionCompatible, testVersionRecommended, testPlayerState, testCurrentTrack;
var iTunesVersion = "", iTunesPlayerState = -1, iTunesCurrentTrackName = "", iTunesException = null;

//  *********** start test session ***********
WScript.Echo("Lyrics Master - Self Test\n\nこのプログラムは、お使いのコンピュータで iTunes 連携機能が正常に利用できるかどうかを診断します。\n\niTunes を起動して、お好きな曲を再生し、「OK」ボタンをクリックしてください。\n診断はすぐに完了します。");

runTest();

//  *********** test report ***********
var reportMsg = "＊テストレポート＊\n\n【テストの結果】";
var testFailed = false;

//  *********** test 1: installation report ***********
reportMsg = reportMsg + "\n　1. インストール状況：";
if (testInstallation == null)
{
    reportMsg = reportMsg + "失敗\n　　このテストを実行できませんでした。";
    testFailed = true;
}
else if (testInstallation == true)
{
    reportMsg = reportMsg + "成功\n　　バージョン " + iTunesVersion +" の iTunes が認識されました。";
}
else
{
    reportMsg = reportMsg + "失敗\n　　iTunes が正常にインストールされていません。";
    testFailed = true;
}

//  *********** test 2: version compatibility ***********
reportMsg = reportMsg + "\n\n　2. バージョンの互換性：";
if (testVersionCompatible == null)
{
    reportMsg = reportMsg + "スキップ\n　　このテストはスキップしました。";
}
else if (testVersionCompatible == true)
{
    if (testVersionRecommended == true)
    {
        reportMsg = reportMsg + "成功\n　　お使いの iTunes で、Lyrics Master をご利用いただけます。";
    }
    else
    {
        reportMsg = reportMsg + "成功\n　　お使いの iTunes は推奨されるバージョンではありませんが、Lyircs Master をご利用いただけます。"
    }
}
else
{
    reportMsg = reportMsg + "失敗\n　　このバージョンの iTunes では、Lyrics Master との連携機能はご利用いただけません。";
    testFailed = true;
}

//  *********** test 3: player status ***********
reportMsg = reportMsg + "\n\n　3. 再生状況：";
if (testPlayerState == null)
{
    reportMsg = reportMsg + "スキップ\n　　このテストはスキップしました。";
}
else if ((testPlayerState == true)&&(0 <= iTunesPlayerState)&&(iTunesPlayerState <= 3))
{
    var visiblePlayerState = "";

    if (iTunesPlayerState == 0)
    {
        visiblePlayerState = "停止中";
    }
    else if (iTunesPlayerState == 1)
    {
        visiblePlayerState = "再生中";
    }
    else if (iTunesPlayerState == 2)
    {
        visiblePlayerState = "早送り中";
    }
    else if (iTunesPlayerState == 3)
    {
        visiblePlayerState = "巻き戻し中";
    }
    else
    {
        visiblePlayerState = "エラー (" + iTunesPlayerState + ")";
        testFailed = true;
    }

    reportMsg = reportMsg + "成功\n　　ステータスは " + visiblePlayerState + " と認識されました。";
}
else
{
    reportMsg = reportMsg + "失敗\n　　取得できませんでした。";
    testFailed = true;
}

//  *********** test 4: current track ***********
reportMsg = reportMsg + "\n\n　4. 再生中のトラック情報：";
if (testCurrentTrack == null)
{
    reportMsg = reportMsg + "スキップ\n　　このテストはスキップしました。";
}
else if (testCurrentTrack == true)
{
    reportMsg = reportMsg + "成功\n　　「" + iTunesCurrentTrackName +"」が再生中です。";
}
else
{
    reportMsg = reportMsg + "失敗\n　　正常に認識できませんでした。";
    testFailed = true;
}

reportMsg = reportMsg + "\n\n【診断】\n　";

if (testFailed)
{
    reportMsg = reportMsg + "テストで、いくつかの問題が発見されました。\n　最新版の iTunes を再度インストールすることで、これらの問題は解決される場合があります。";
    if (iTunesException !== null) {
        reportMsg += [
            "",
            "　開発者に連絡する場合は以下の情報を合わせてお知らせください。",
            "　　エラーメッセージ: " + iTunesException.message,
            "　　エラーコード: " + iTunesException.number,
            ""
        ].join('\n')
    }
}
else if (iTunesPlayerState == 0)
{
    reportMsg = reportMsg + "iTunes で曲が再生されていないため、一部のテストを実行できませんでした。\n　iTunes で曲を再生してから、もう一度テストを実行してください。";
}
else
{
    reportMsg = reportMsg + "テストでは、問題が見つかりませんでした。\n　Lyrics Master で iTunes との連携に問題がある場合は、開発者までお知らせください。";
}

reportMsg = reportMsg + "\n\nこの画面を開いたまま Ctrl-C を押すと、このテストリポートの内容をコピーできます。";

WScript.Echo(reportMsg);

// *******************************************************************************
//  END MAIN
// *******************************************************************************


function runTest()
{
    try
    {
        var iTunesApp = WScript.CreateObject("iTunes.Application");
        iTunesVersion = iTunesApp.Version;
        testInstallation = true;
    }
    catch (e)
    {
        iTunesException = e;
        testInstallation = false;
        iTunesVersion = "不明";
        return;
    }

    try
    {
        testVersionCompatible = iTunesApp.CheckVersion(1, 5);
        if (! testVersionCompatible)
        {
            return;
        }

        testVersionRecommended = iTunesApp.CheckVersion(1, 9);
    }
    catch (e)
    {
        iTunesException = e;
        testVersionCompatible = false;
        testVersionRecommended = false;
        return;
    }

    try
    {
        iTunesPlayerState = iTunesApp.PlayerState;
        testPlayerState = true;

        if (iTunesPlayerState == 0)
        {
            return;
        }
    }
    catch (e)
    {
        iTunesException = e;
        testPlayerState = false;
        return;
    }

    try
    {
        var currentTrack = iTunesApp.CurrentTrack;
        iTunesCurrentTrackName = currentTrack.Name;
        testCurrentTrack = true;
    }
    catch (e)
    {
        iTunesException = e;
        testCurrentTrack = false;
    }

    return;
}
