using UnityEngine;

namespace Marro.PacManUdon
{
    public partial class GameManager
    {
        private void TimeSequenceStepAttractScreenIntroduction(int sequenceProgress)
        {
            switch (sequenceProgress)
            {
                case 0:
                    PrepareForCutscene();
                    
                    SetGameState(PacManGameState.AttractMode);

                    // Initialize
                    soundManager.SuppressSound(true);
                    attractScreen.gameObject.SetActive(true);
                    attractScreen.Initialize(this, bonusFruit, ghostManager.Ghosts);
                    for (int i = 0; i <= 15; i++)
                    {
                        // Debug.Log($"{gameObject} TimeSequenceAttractScreen deactivating with iteration i");
                        attractScreenElements[i].SetActive(false);
                    }
                    attractScreen.SetPowerPelletsBlink(false);
                    break;
                case 1:
                    // show "Character / Nickname"
                    attractScreenElements[0].SetActive(true);
                    break;
                case 2:
                    // Show blinky sprite
                    attractScreenElements[1].SetActive(true);
                    break;
                case 3:
                    // Show blinky character
                    attractScreenElements[2].SetActive(true);
                    break;
                case 4:
                    // Show blinky nickname
                    attractScreenElements[3].SetActive(true);
                    break;
                case 5:
                    // Show pinky sprite
                    attractScreenElements[4].SetActive(true);
                    break;
                case 6:
                    // Show pinky character
                    attractScreenElements[5].SetActive(true);
                    break;
                case 7:
                    // Show pinky nickname
                    attractScreenElements[6].SetActive(true);
                    break;
                case 8:
                    // Show inky sprite
                    attractScreenElements[7].SetActive(true);
                    break;
                case 9:
                    // Show inky character
                    attractScreenElements[8].SetActive(true);
                    break;
                case 10:
                    // Show inky nickname
                    attractScreenElements[9].SetActive(true);
                    break;
                case 11:
                    // Show clyde sprite
                    attractScreenElements[10].SetActive(true);
                    break;
                case 12:
                    // Show clyde character
                    attractScreenElements[11].SetActive(true);
                    break;
                case 13:
                    // Show clyde nickname
                    attractScreenElements[12].SetActive(true);
                    break;
                case 14:
                    // Show pellet point values
                    attractScreenElements[13].SetActive(true);
                    break;
                case 15:
                    // Show copyright message, setup pellet demonstration
                    attractScreenElements[14].SetActive(true);
                    attractScreenElements[15].SetActive(true);

                    pacMan.Reset();
                    pacMan.SetLevel(1);
                    pacMan.SetKinematic(true);
                    pacMan.SetActive(true);
                    pacMan.SetPosition(attractScreenElements[16].transform.localPosition);
                    pacMan.SetDirection(Direction.Left);

                    ghostManager.SetLevel(2);
                    ghostManager.SetKinematic(true);
                    ghostManager.SetActive(true);
                    Ghost[] ghosts = ghostManager.Ghosts;
                    for (int i = 0; i < ghosts.Length; i++)
                    {
                        ghosts[i].SetPosition(attractScreenElements[17 + i].transform.localPosition);
                        ghosts[i].SetDirectionAndTargetDirection(Direction.Left);
                        ghosts[i].SetState(PacManGhostState.Normal);
                    }
                    break;

                case 16:
                    attractScreen.SetPowerPelletsBlink(true);

                    SetFrozen(false);
                    break;

                case 17:
                    ghostManager.SetPowerPellet(true);
                    pacMan.SetPowerPellet(true);
                    attractScreenElements[15].SetActive(false);
                    break;

                case 18:
                    // Turn PacMan around after eating power pellet
                    pacMan.SetDirectionAndTargetDirection(Direction.Right);
                    break;

                case 19:
                    ghostManager.Ghosts[0].Caught(200);
                    pacMan.SetActive(false);
                    SetFrozen(true);
                    break;
                case 20:
                    ghostManager.Ghosts[0].ReturnHome();
                    ghostManager.Ghosts[0].SetActive(false);
                    pacMan.SetActive(true);
                    SetFrozen(false);
                    break;
                case 21:
                    ghostManager.Ghosts[1].Caught(400);
                    pacMan.SetActive(false);
                    SetFrozen(true);
                    break;
                case 22:
                    ghostManager.Ghosts[1].ReturnHome();
                    ghostManager.Ghosts[1].SetActive(false);
                    pacMan.SetActive(true);
                    SetFrozen(false);
                    break;
                case 23:
                    ghostManager.Ghosts[2].Caught(800);
                    pacMan.SetActive(false);
                    SetFrozen(true);
                    break;
                case 24:
                    ghostManager.Ghosts[2].ReturnHome();
                    ghostManager.Ghosts[2].SetActive(false);
                    pacMan.SetActive(true);
                    SetFrozen(false);
                    break;
                case 25:
                    ghostManager.Ghosts[3].Caught(1600);
                    pacMan.SetActive(false);
                    SetFrozen(true);
                    break;
                case 26:
                    ghostManager.Ghosts[3].ReturnHome();
                    ghostManager.Ghosts[3].SetActive(false);
                    break;
            }
        }

        private void TimeSequenceFinalizeAttractScreenIntroduction()
        {
            attractScreen.gameObject.SetActive(false);
        }

        private void TimeSequenceFinishedAttractScreenIntroduction()
        {
            StartTimeSequence(PacManTimeSequence.AttractScreenDemo);
        }
    }
}
