namespace GMLL00ImportadorXsd.Utilidades.Corp.Wcf.FechaHora
{
    using System;
    using System.ServiceModel;
    using System.Text;
    using WCORPFechaHora;

    internal sealed class FechaHora : WcfBase<IWCORPFechaHoraChannel>
    {
        public FechaHora(string ficheroConfiguracion)
            : base(ficheroConfiguracion)
        {
        }

        public DateTime ObtenerFechaHora(OrigenFechaHora origen)
        {
            DateTime fechaHora;

            const string MensajeErrorGenerico = "Ocurrió un error al invocar WCORPFechaHora.ObtenerFechaHora.";

            var canal = CrearCanal();

            try
            {
                fechaHora = canal.ObtenerFechaHora(origen);

                canal.Close();
            }
            catch (FaultException<ValidationFault> ex)
            {
                canal.Abort();

                var informaciónError = new StringBuilder(MensajeErrorGenerico);

                foreach (ValidationDetail detail in ex.Detail.Details)
                {
                    informaciónError
                        .AppendLine()
                        .AppendFormat("Detalle: {0}", detail.Message);
                }

                throw new FaultException(informaciónError.ToString());
            }
            catch (FaultException<ExceptionFault> ex)
            {
                canal.Abort();

                var informaciónError = new StringBuilder(MensajeErrorGenerico)
                    .AppendLine()
                    .AppendFormat("Error = {0}", ex.Detail.Error).AppendLine()
                    .AppendFormat("MensajeError = {0}", ex.Detail.MensajeError)
                    .ToString();

                throw new FaultException(informaciónError);
            }
            catch
            {
                canal.Abort();
                throw;
            }

            return fechaHora;
        }
    }
}