// 도메인 전쟁 Topaz 엔트리. 입력 패킷을 파싱하고 pure core에 위임한 뒤 DW1 패킷을 프린트한다.
// Domain War Topaz entry. Parse the input packet, delegate to the pure core, and print a DW1 packet.
//
// 하우스룰(app): app 계층은 패킷 파싱 + 코어 호출 + print만 한다. 게임 규칙은 core/game.tpz에 있다.
// House rule (app): packet parsing + core call + print only. Game rules live in core/game.tpz.
//
// DW1 packet contract:
//   입력:  DW1 / STATE:<prev> / EVENT:<choice_0|choice_1|choice_2|back|restart>
//   출력:  DW1 / STATE:<new> / SCENE:<scene id> / TEXT:<text key> / CHOICES:<choice text keys pipe-separated>

import core.game { 처리 }

// 문자열에서 접두사 뒤의 꼬리를 Unicode scalar 인덱스 기반 slice로 돌려준다.
// Return the tail after a prefix with Unicode-scalar-indexed slice.
function 접두사뒤(전체: string, 접두사: string) -> string {
  전체.slice(접두사.scalars().length, 전체.scalars().length)
}

// "PREFIX:"로 시작하는 줄에서 값을 읽는다. 없으면 빈 문자열.
// Read the value after a "PREFIX:" line. Missing values become empty string.
function 줄값(원본: string, 접두사: string) -> string {
  원본.split("\n").reduce("", (값, 줄) => {
    let 다듬 = 줄.trim()
    if 다듬.startsWith(접두사) { 접두사뒤(다듬, 접두사) } else { 값 }
  }).trim()
}

let 패킷 = input()
print(처리(줄값(패킷, "STATE:"), 줄값(패킷, "EVENT:")))
