//---------------------------------------------------------------------------------------------------------------------------------------------------
// <copyright file="PlayerSetup.cs" company="DarkWynter Studios">
//     Copyright (C)2007 DarkWynter Studios.  All rights reserved.
// </copyright>
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {Contact : darkwynter.com for licensing information
//---------------------------------------------------------------------------------------------------------------------------------------------------

namespace ElementalGame.GraphicUserInterface
{
    #region Using Statements
    using System;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    #endregion

    using DarkWynterEngine.Globals;
    using DarkWynterEngine.ObjectLib;
    using DarkWynterEngine.Menus;


    /// <summary>
    /// Player customization screen 
    /// </summary>
    public class PlayerSetup : GameScreen
    {
        GameMenu diagnosisMenu;
        
        /// <summary>
        /// Currently selected character.
        /// </summary>
        public int playerNumber = 0;
        
        /// <summary>
        /// Player Setup Menu constructor
        /// </summary>
        public PlayerSetup()
        {
            float scaleX = (Statics.SystemSettings.GAME_WINDOW_WIDTH / 1280.0f);
            float scaleY = (Statics.SystemSettings.GAME_WINDOW_HEIGHT / 1024.0f);

            menu = new GameMenu("Player 1", 60 * scaleX, 48 * scaleY);
            menu.AddImageScroller("", 1);

            diagnosisMenu = new GameMenu("Diagnosis", 60 * scaleX, 500 * scaleY);
            diagnosisMenu.AddRandomImageDisplay("");

            //scale up the images
            menu.GetMenuElement(0).SetScale(1.6f, 1.7f);
            diagnosisMenu.GetMenuElement(0).SetScale(1.6f, 1.7f);
        }

        /// <summary>
        /// Get the Player Selection scroller.
        /// </summary>
        /// <returns>Player Selection scroller.</returns>
        public GameMenuImageScroller GetPlayerSelection()
        {
            return ((GameMenuImageScroller)menu.GetMenuElement(0));
        }

        /// <summary>
        /// Get the character information display element.
        /// </summary>
        /// <returns>Information display element.</returns>
        public GameMenuRandomImageDisplay GetDiagnosisDisplay()
        {
            return ((GameMenuRandomImageDisplay)diagnosisMenu.GetMenuElement(0));
        }

        /// <summary>
        /// Draw the player demo menu.
        /// </summary>
        /// <param name="spriteBatch">SpriteBatch used to draw used to draw.</param>
        public new void Draw(SpriteBatch spriteBatch)
        {
            base.Draw(spriteBatch);
            diagnosisMenu.Draw(spriteBatch);
        }

        /// <summary>
        /// Commit changes to Player Setup Menu
        /// </summary>
        /// <param name="objectLibrary">Object Library that player belongs to.</param>
        public void Commit(ObjectLibrary objectLibrary)
        {
            switch (playerNumber)
            {
                case 0:
                    {
                        // Player 1 Color Select
                        objectLibrary.humans[0].SetDiffuseRed(255);
                        objectLibrary.humans[0].SetDiffuseGreen(255);
                        objectLibrary.humans[0].SetDiffuseBlue(255);
                        objectLibrary.humans[0].SetDiffuseAlpha(255);
                        GetMenu().SetTitle("Player 2");
                        break;
                    }
                case 1:
                    {
                        // Player 2 Color Select
                        objectLibrary.humans[1].SetDiffuseRed(255);
                        objectLibrary.humans[1].SetDiffuseGreen(255);
                        objectLibrary.humans[1].SetDiffuseBlue(255);
                        objectLibrary.humans[1].SetDiffuseAlpha(255);
                        GetMenu().SetTitle("Player 3");
                        break;
                    }
                case 2:
                    {
                        // Player 3 Color Select
                        objectLibrary.humans[2].SetDiffuseRed(255);
                        objectLibrary.humans[2].SetDiffuseGreen(255);
                        objectLibrary.humans[2].SetDiffuseBlue(255);
                        objectLibrary.humans[2].SetDiffuseAlpha(255);
                        GetMenu().SetTitle("Player 4");
                        break;
                    }
                case 3:
                    {
                        // Player 4 Color Select
                        objectLibrary.humans[3].SetDiffuseRed(255);
                        objectLibrary.humans[3].SetDiffuseGreen(255);
                        objectLibrary.humans[3].SetDiffuseBlue(255);
                        objectLibrary.humans[3].SetDiffuseAlpha(255);
                        break;
                    }
            }

            // Player Character Select
            if (playerNumber < Statics.SystemSettings.TOTAL_PLAYERS - 1)
            {
                playerNumber++;
                Statics.currentPlayerIndex = playerNumber;
                GetPlayerSelection().SetCurrentIndex(0);
            }
            else
            {
                playerNumber = 0;
                Statics.currentPlayerIndex = playerNumber;

                GetMenu().SetTitle("Player 1");
            }
        }
    }
}