using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace Gestor_de_Contenidos
{
    public partial class uc_pacientes : uc_base
    {
        List<Paciente> pacientes;
        string id_paciente_seleccionado;
        public uc_pacientes()
        {
            InitializeComponent();
            pacientes = new List<Paciente>();
        }

        private void uc_pacientes_Load(object sender, EventArgs e)
        {
            cargarPacientesXML();
            cargarListView();
        }

        private void cargarListView()
        {
            lv_pacientes.Items.Clear();
            foreach (Paciente p in pacientes)
            {
                ListViewItem lvi = new ListViewItem(p.Id.ToString());
                lvi.SubItems.Add(p.Nombre);
                lvi.SubItems.Add(p.Apellidos);
                lvi.SubItems.Add(p.Fecha_nacimiento.ToShortDateString());
                lv_pacientes.Items.Add(lvi);
            }
        }

        private void cargarPacientesXML()
        {

            if (System.IO.Directory.Exists(frm_principal.getInstance().Path_base + "Pacientes"))
            {
                foreach (string dir in System.IO.Directory.EnumerateDirectories(frm_principal.getInstance().Path_base + "Pacientes"))
                {
                    string[] aux = dir.Split('\\');
                    if (!aux[aux.Length - 1].Equals("0"))
                    {
                        XmlDocument xDoc = new XmlDocument();
                        xDoc.Load(dir + "\\index.xml");
                        XmlNodeList xnl_paciente = xDoc.GetElementsByTagName("paciente");
                        string nombre = xnl_paciente[0].Attributes.GetNamedItem("nombre").InnerText.Trim();
                        string apellidos = xnl_paciente[0].Attributes.GetNamedItem("apellidos").InnerText.Trim();
                        string id = xnl_paciente[0].Attributes.GetNamedItem("id").InnerText.Trim();
                        string fecha = xnl_paciente[0].Attributes.GetNamedItem("fecha").InnerText.Trim();
                        string[] f = fecha.Split('/');
                        DateTime fecha_nacimiento = new DateTime(int.Parse(f[2]), int.Parse(f[1]), int.Parse(f[0]));

                        Paciente p = new Paciente(nombre, apellidos, fecha_nacimiento);
                        p.Id = int.Parse(id);
                        pacientes.Add(p);
                    }
                }

            }
        }

        private void btn_nuevo_paciente_Click(object sender, EventArgs e)
        {
            frm_nuevo_paciente np = new frm_nuevo_paciente();
            if (np.ShowDialog() == DialogResult.OK)
            {
                Paciente p = np.getPaciente();
                asignarIdentificador(p);
                pacientes.Add(p);
                cargarListView();
            
            }


        }

        private void asignarIdentificador(Paciente p)
        {
            for (int i = 1; i >= 1; i++)
            {
                bool existe = false;
                for (int j = 0; (j < pacientes.Count && !existe);j++ )
                {
                    if (pacientes[j].Id == i)
                        existe = true;

                }

                if (!existe)
                {
                    p.Id = i;
                    i = -2;
                
                }

            }
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {

            foreach (Paciente p in pacientes)
            {
                p.guardarXML();
            
            }
            frm_principal.getInstance().cambiarPantalla(new uc_pantalla_principal());
        }

        private void eliminar_paciente_Click(object sender, EventArgs e)
        {
            Paciente pelim = null;
            if (id_paciente_seleccionado != null)
            {
                
                foreach (Paciente p in pacientes) {
                    if (p.Id == int.Parse(id_paciente_seleccionado))
                        pelim = p;
                
                }

                //visualizazar campos
                btn_guardar_cambios.Visible = false;
                lbl_apellidos.Visible = false;
                lbl_fecha.Visible = false;
                lbl_nombre.Visible = false;
                label2.Visible = false;
                tb_apellidos.Visible = false;
                tb_id.Visible = false;
                tb_nombre.Visible = false;
                tb_observaciones.Visible = false;
                gb_paciente.Visible = false;
            
            }
            pacientes.Remove(pelim);
            tb_apellidos.Text = "";
            tb_id.Text = "";
            tb_nombre.Text = "";
            dateTimePicker1.Value = DateTime.Today;
            cargarListView();

            try
            {
                System.IO.Directory.Delete(frm_principal.getInstance().Path_base + "Pacientes\\" + pelim.Id + "\\",true);
            }
            catch (Exception ex) { }
        }

        private void lv_pacientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lv_pacientes.SelectedItems.Count > 0)
            {
                ListViewItem it = lv_pacientes.SelectedItems[0];
                id_paciente_seleccionado = it.Text;
                eliminar_paciente.Enabled = true;
                btn_guardar_cambios.Enabled = true;
                cargaPacienteEdicion(int.Parse(id_paciente_seleccionado));

                //visualizazar campos
                btn_guardar_cambios.Visible = true;
                
                lbl_apellidos.Visible = true;
                lbl_fecha.Visible = true;
                lbl_nombre.Visible = true;
                label2.Visible = true;
                tb_apellidos.Visible = true;
                tb_id.Visible = true;
                tb_nombre.Visible = true;
                tb_observaciones.Visible = true;
                gb_paciente.Visible = true;


            }

            else
            {

                eliminar_paciente.Enabled = false ;
                btn_guardar_cambios.Enabled = false ;

                //visualizazar campos
                btn_guardar_cambios.Visible = false;
                lbl_apellidos.Visible = false;
                lbl_fecha.Visible = false;
                lbl_nombre.Visible = false;
                label2.Visible = false;
                tb_apellidos.Visible = false;
                tb_id.Visible = false;
                tb_nombre.Visible = false;
                tb_observaciones.Visible = false;
                gb_paciente.Visible = false;

            }
        }

        private void cargaPacienteEdicion(int id_paciente_seleccionado)
        {
            foreach (Paciente p in pacientes) {
                if (p.Id == id_paciente_seleccionado) {

                    tb_nombre.Text = p.Nombre;
                    tb_apellidos.Text = p.Apellidos;
                    tb_id.Text = p.Id.ToString();
                    dateTimePicker1.Value = p.Fecha_nacimiento;
                
                }
            
            }
        }

        private void btn_guardar_cambios_Click(object sender, EventArgs e)
        {
            if (id_paciente_seleccionado != null) {

                if (tb_apellidos.Text.Equals("") || tb_nombre.Text.Equals("") || dateTimePicker1.Value == null)
                {
                    MessageBox.Show("No se han rellenado todos los campos", "Incompleto", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
                }

                else if (dateTimePicker1.Value.CompareTo(System.DateTime.Today) <= 0) { 
                //OK
                    foreach (Paciente p in pacientes) {
                        if (p.Id == int.Parse(id_paciente_seleccionado))
                        {
                            p.Nombre = tb_nombre.Text;
                            p.Apellidos = tb_apellidos.Text;
                            p.Fecha_nacimiento = dateTimePicker1.Value;
                        }
                    
                    }
                    cargarListView();
                
                }else
                    MessageBox.Show("La fecha debe ser menor que la fecha actual", "Fecha Incorrecta", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            frm_principal.getInstance().cambiarPantalla(new uc_pantalla_principal());
        }


    }
}
