namespace GMLL00ImportadorXsd.Utilidades.Corp.Wcf.Conexion
{
    using System.ServiceModel;
    using System.Text;
    using WCorpConexion;

    internal sealed class Conexion : WcfBase<IWCorpConexionChannel>
    {
        public Conexion(string ficheroConfiguracion)
            : base(ficheroConfiguracion)
        {
        }

        public string ObtenerCadenaConexion(string entrada)
        {
            string cadenaConexion;

            const string MensajeErrorGenerico = "Ocurrió un error al invocar WCorpConexion.fStrLeerCadenaConexion.";

            var canal = CrearCanal();

            try
            {
                cadenaConexion = canal.fStrLeerCadenaConexion(entrada);

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

                var informacionError = new StringBuilder(MensajeErrorGenerico);

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

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

                var informacionError = new StringBuilder(MensajeErrorGenerico)
                    .AppendLine()
                    .AppendFormat("Error = {0}", ex.Detail.intError).AppendLine()
                    .AppendFormat("MensajeError = {0}", ex.Detail.strError)
                    .ToString();

                throw new FaultException(informacionError);
            }
            catch
            {
                canal.Abort();
                throw;
            }

            return cadenaConexion;
        }
    }
}