package main

import "core:fmt"
import "core:math/ease"
import "ntween"
import rl "vendor:raylib"


Winning :: struct {
	using state: GameState,
	position:    vec2,
	size:        vec2,
	ready_to_go: bool,
}

winning_init :: proc(prev: ^GameState = nil) -> ^GameState {
	state := new(Winning)
	state.variant = state
	state.position = vec2{WSize.x / 2, WSize.y + 300}
	state.size = {700, 500}
	state.update = winning_update
	state.draw = winning_draw
	state.free = winning_free

	state.previous = prev
	ntween.animate(
		&vec2_tweens,
		&state.position,
		WSize / 2,
		1,
		ease.Ease.Back_Out,
		state,
		winning_ready,
	)

	return state
}

winning_update :: proc(state: ^GameState, delta: f32) {
	winning := transmute(^Winning)state
	if winning.ready_to_go {
		if rl.IsKeyPressed(rl.KeyboardKey.ESCAPE) {
			winning.ready_to_go = false
			rl.StopMusicStream(current_music)
			ntween.animate(
				&f32_tweens,
				&Overlay_Opacity,
				1.0,
				0.5,
				ease.Ease.Cubic_Out,
				nil,
				proc(data: rawptr) {
					state := transmute(^GameState)data
					stack_pop()
					game := transmute(^Game)state.previous
					game_setup(game)
					menu := menu_init(game)
					stack_push(menu)
					free(state)
					ntween.animate(&f32_tweens, &Overlay_Opacity, 0, 0.5, ease.Ease.Cubic_Out)
				},
			)
		}
	}
}


winning_draw :: proc(state: ^GameState) {
	winning := transmute(^Winning)state

	if state.previous != nil {
		state.previous->draw()
	}

	TitleFontSize :: 96
	TitleSpacing :: 3
	TitleText :: "GAME OVER"

	SubtitleText := [?]cstring {
		"Тор смог спасти Асгард",
		"от Рагнарёка!",
		"Нажмите Escape чтобы выйти",
	}
	SubtitleFontSize :: 48


	rl.DrawRectangleV(winning.position - winning.size / 2, winning.size, rl.Color{90, 30, 150, 10})

	draw_text_centered(
		Res.Fonts.Title,
		TitleText,
		winning.position - {0, 100},
		TitleFontSize,
		1,
		rl.WHITE,
	)
	for c, i in SubtitleText {
		draw_text_centered(
			Res.Fonts.UI,
			c,
			winning.position - {0, f32(10 - i * 50)},
			SubtitleFontSize,
			1,
			rl.WHITE,
		)
		// rl.DrawTextPro(Res.Fonts.UI, c, winning.position - {0, f32(10 - i * 50)}, SubtitleSizes[i] / 2, 0, SubtitleFontSize, SubtitleSpacing, rl.WHITE)
	}


}

winning_free :: proc(state: ^GameState) {
	// free(state)
}

winning_ready :: proc(state: rawptr) {
	winning := transmute(^Winning)state
	winning.ready_to_go = true
}
