// 
// Copyright 2016 Agencia Estatal de Administración Tibutaria
//
// Licencia con arreglo a la EUPL, Versión 1.1 o -en cuanto
// sean aprobadas por la Comisión Europea- versiones
// posteriores de la EUPL (la «Licencia»);
// Solo podrá usarse esta obra si se respeta la Licencia.
// Puede obtenerse una copia de la Licencia en:
//  
// https://joinup.ec.europa.eu/software/page/eupl
//  
// Salvo cuando lo exija la legislación aplicable o se acuerde
// por escrito, el programa distribuido con arreglo a la
// Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
// DE NINGÚN TIPO, ni expresasni implícitas.
//
// Véase la Licencia en el idioma concreto que rige los permisos y 
// limitaciones que establece la Licencia.
// 

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

namespace operador
{
    public partial class FormReconexion : Form
    {
        Comunicaciones comm;
        Configuracion conf;
        string rotulo = "Intentando la conexión con ";
        public bool cancelado = false;
        int puntos = 0;

        public FormReconexion(Comunicaciones comm) {
            this.comm = comm;
            this.conf = Configuracion.instanciaUnica();
            InitializeComponent();
        }

        void ponerPuntos() {
            lbIntentando.Text = "Buscando el servidor ATENEO activo";
            ponerPuntosInt();
        }

        void ponerPuntos(bool alternar) {
            if (conf.usandoUDP) {
                lbIntentando.Text = rotulo + conf.nombreServidor;
            } else {
                lbIntentando.Text = rotulo + (alternar ? conf.ipServidor : conf.ipServidorSec);
            }
            ponerPuntosInt();
        }

        void ponerPuntosInt() {
            puntos++;
            string texto = "espere";
            for (int i = 0; i < puntos; i++) {
                texto += ".";
            }
            if (puntos == 3) {
                puntos = 0;
            }
            lbEspere.Text = texto;
        }

        void conectar() {
            if (Configuracion.instanciaUnica().usandoUDP) {
                while (!comm.abierto) {
                    if (cancelado) {
                        break;
                    }
                    ponerPuntos();
                    Refresh();
                    for (int i = 0; i < 30; i++) {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                    comm.abrir(false);
                }
            } else {
                bool alternar = true;
                while (!comm.abierto) {
                    if (cancelado) {
                        break;
                    }
                    ponerPuntos(alternar);
                    Refresh();
                    for (int i = 0; i < 30; i++) {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                    comm.abrir(alternar);
                    alternar = !alternar;
                }
            }
            Close();
        }

        private void FormReconexion_Shown(object sender, EventArgs e) {
            conectar();
        }

        private void btCancelar_Click(object sender, EventArgs e) {
            cancelado = true;
        }
    }
}