using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Collections;
using System.Collections.ObjectModel;
using System.Windows.Navigation;

namespace AplicacionEstadisticas
{
    public partial class MainPage : PhoneApplicationPage
    {
        //Inicializando las variables necesarias

        private int contador = 0;                   //Variable int para que no cargue dos veces la información de los estados
        private int contador2 = 0;                  //Variable int para que no cargue dos veces la información de las instituciones
        private int contador3 = 0;                  //Variable int para que no cargue dos veces la información de los meses.

        private DateTime fechaEstado;               //Variable donde se guarda la fecha seleccionada en la seccion de llaves por estado
        private DateTime fechaInstitucion;          //Variable donde se guarda la fecha seleccionada en la seccion de llaves por institucion
        private DateTime fechaMes;                  //Variable donde se guarda la fecha seleccionada en la seccion de llaves por mes

        private Boolean ds_fc = false;              //Booleano que guarda el tipo de llave seleccionado en la seccion de llaves por estado (true = Dreamspark, false = Faculty Connection)
        private Boolean ds_fc_institucion = false;  //Booleano que guarda el tipo de llave seleccionado en la seccion de llaves por institucion (true = Dreamspark, false = Faculty Connection)
        private Boolean ds_fc_mes = false;          //Booleano que guarda el tipo de llave seleccionado en la seccion de llaves por mes (true = Dreamspark, false = Faculty Connection)

        // Constructor

        public MainPage()
        {
            //Inicializar todos lo componentes de la aplicacion.
            InitializeComponent();

            //Crear un data context para una listbox con información de prueba.
            DataContext = App.ViewModel;

            //¿Que hacer cuando se cargue la pagina?
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        // Cargar los datos del view model al iniciar la aplicacion
        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            //Actualizar las secciones de llaves por estado, por institucion y por mes con los valores default (Llave: Dreamspark, Año: 2011)
            ActualizarFechaEstados(new object(), new DateTimeValueChangedEventArgs(new DateTime(), new DateTime()));
            ActualizarFechaInstitucion(new object(), new DateTimeValueChangedEventArgs(new DateTime(), new DateTime()));
            ActualizarFechaMes(new object(), new DateTimeValueChangedEventArgs(new DateTime(), new DateTime()));
        }

        // Event handler no usado
        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {

        }

        //Aplicacion Estados

        //Manejador de evento de cambio de tipo de llave de la seccion de llaves por estado
        private void ActualizarLlaveEstados(object sender, SelectionChangedEventArgs e)
        {
            //Si hubo un cambio en la seleccion, cambia el tipo de llave
            if (ds_fc)
                ds_fc = false;
            else
                ds_fc = true;

            // Carga los datos usando la información actualizada
            App.ViewModel.LoadData(fechaEstado, ds_fc);

        }

        //Manejador de evento de cambio de fecha de la seccion de llaves por estado
        private void ActualizarFechaEstados(object sender, DateTimeValueChangedEventArgs e)
        {
            if (contador > 0)
            {
                //Cambia la fecha por la que se encuentra en el datepicker de la seccion de llaves por estado
                fechaEstado = DateTime.Parse(FechaEstados.ValueString);

                // Carga los datos usando la información actualizada
                App.ViewModel.LoadData(fechaEstado, ds_fc);

            }
            contador++;

        }

        //Manejador de evento de boton de ver detalles de la seccion llaves por estado
        private void VerDetallesEstados(object sender, RoutedEventArgs e) //Boton Estados
        {
            // Carga los datos usando la información actualizada
            App.ViewModel.LoadData(fechaEstado, ds_fc);

            // Se abre la página xaml que despliega la información detallada de los estados
            NavigationService.Navigate(new Uri("/DK_Estado.xaml", UriKind.Relative));

        }
        
        //Aplicacion Institucion

        //Manejador de evento de cambio de tipo de llave de la seccion de llaves por estado
        private void ActualizarLlaveInstitucion(object sender, SelectionChangedEventArgs e)
        {
            //Si hubo un cambio en la seleccion, cambia el tipo de llave
            if (ds_fc_institucion)
                ds_fc_institucion = false;
            else
                ds_fc_institucion = true;

            // Carga los datos usando la información actualizada
            App.ViewModel.LoadDataInstitucion(fechaInstitucion, ds_fc_institucion);
        }

        //Manejador de evento de cambio de fecha de la seccion de llaves por institución
        private void ActualizarFechaInstitucion(object sender, DateTimeValueChangedEventArgs e)
        {
            if (contador2 > 0)
            {
                //Cambia la fecha por la que se encuentra en el datepicker de la seccion de llaves por institucion
                fechaInstitucion = DateTime.Parse(FechaInstituciones.ValueString);

                // Carga los datos usando la información actualizada
                App.ViewModel.LoadDataInstitucion(fechaInstitucion, ds_fc_institucion);
            }
            contador2++;

        }

        //Manejador de evento de boton de ver detalles de la seccion llaves por estado
        private void VerDetallesInstituciones(object sender, RoutedEventArgs e)
        {

            // Carga los datos usando la información actualizada
            App.ViewModel.LoadDataInstitucion(fechaInstitucion, ds_fc_institucion);

            // Se abre la página xaml que despliega la información detallada de las instituciones
            NavigationService.Navigate(new Uri("/DK_Institucion.xaml", UriKind.Relative));
        }

        
        //Aplicacion Meses
        
        //Manejador de evento de cambio de tipo de llave de la seccion de llaves por mes
        private void ActualizarLlaveMes(object sender, SelectionChangedEventArgs e)
        {
            //Si hubo un cambio en la seleccion, cambia el tipo de llave
            if (ds_fc_mes)
                ds_fc_mes = false;
            else
                ds_fc_mes = true;

            // Carga los datos usando la información actualizada
            App.ViewModel.LoadDataMes(fechaMes, ds_fc_mes);
        }

        //Manejador de evento de cambio de fecha de la seccion de llaves por mes
        private void ActualizarFechaMes(object sender, DateTimeValueChangedEventArgs e)
        {
            if (contador3 > 0)
            {
                //Cambia la fecha por la que se encuentra en el datepicker de la seccion de llaves por mes
                fechaMes = DateTime.Parse(FechaMeses.ValueString);
                
                // Carga los datos usando la información actualizada
                App.ViewModel.LoadDataMes(fechaMes, ds_fc_mes);

            }
            contador3++;

        }

        //Manejador de evento de boton de ver detalles de la seccion llaves por mes
        private void VerDetallesMeses(object sender, RoutedEventArgs e)
        {
            // Carga los datos usando la información actualizada
            App.ViewModel.LoadDataMes(fechaMes, ds_fc_mes);//Renombrar el metodo

            // Se abre la página xaml que despliega la información detallada de los estados
            NavigationService.Navigate(new Uri("/DK_Mes.xaml", UriKind.Relative));
        }

    }
}
