//#-hidden-code
//
//  See LICENSE folder for this template’s licensing information.
//
//  Abstract:
//  The Swift file containing the source code edited by the user of this playground book.
//
import PlaygroundSupport
import Foundation
import Network
import UIKit

let page = PlaygroundPage.current
page.needsIndefiniteExecution = false

func send(_ str: String) {
    if let proxy1 = page.liveView as? PlaygroundRemoteLiveViewProxy {
        let message: PlaygroundValue = .string(str)
        proxy1.send(message)
    }
}

var clear = false  // 初期状態ではクリアしていない
// PlaygroundRemoteLiveViewProxyDelegate を使う
class MessageHandler: NSObject, PlaygroundRemoteLiveViewProxyDelegate {
    func remoteLiveViewProxy(
        _ remoteLiveViewProxy: PlaygroundRemoteLiveViewProxy,
        received message: PlaygroundValue
    ) {
        if case let .string(text) = message {
            if text == "goal" {
                clear = true  // ゴールメッセージを受信したらクリア
            }
        }
    }
    func remoteLiveViewProxyConnectionClosed(_ remoteLiveViewProxy: PlaygroundRemoteLiveViewProxy) {}
}

// Playground の Live View にメッセージハンドラをセット
if let remoteView = PlaygroundPage.current.liveView as? PlaygroundRemoteLiveViewProxy {
    let handler = MessageHandler()
    remoteView.delegate = handler
}

func left() {
    send("left 1")
    Thread.sleep(forTimeInterval: 0.5)
}

func right() {
    send("right 1")
    Thread.sleep(forTimeInterval: 0.5)
}

func move() {
    send("move 1")
    Thread.sleep(forTimeInterval: 0.5)
}

func codeFinished() {
    send("finished")
}

func sendMessage(_ message: String) {
    send("message "+message)
}

//成功メッセージをセット
send("successmessage 🚀確認成功！\n🎉プログラムと動作がわかりましたね！")
//画面をリセット
send("clear")
Thread.sleep(forTimeInterval: 1.0)

//#-end-hidden-code
/*: some text
 ##  🚀動作確認
 実行してプログラムの動作を確認しましょう！\
 [move()](glossary://move)で宇宙船を前に進める事ができます。\
 [left()](glossary://move)で宇宙船を左に回転する事ができます。\
 [right()](glossary://move)で宇宙船を右に回転する事ができます。\
　隕石を避けながら地球を目指して、ゴールしよう！
 * note:
・画面右上の［リセット］ボタンで初期状態に戻ります。\
・本コンテンツで使用しているBGM\
　DOVA-SYNDROME　プレリュード第3番「未知との邂逅」\
・BGMは画面下にあるスピーカーを押すとON/OFFできます。
 ---
 */
//#-code-completion(everything, hide)
//#-editable-code
//ここからプログラムです。
move()
move()
right()
move()
left()
move()

//#-end-editable-code
//#-hidden-code
sendMessage("1,1,①-😊実行しました。")
codeFinished()
//assessmentStatusを設定すると、実行が止まるので、必要な処理は全て済ませる。
//if( PlaygroundPage.current.assessmentStatus == nil ){
//    PlaygroundPage.current.assessmentStatus = .pass(message: "😊実行しました。")
//}
//#-end-hidden-code
