namespace GMLL00ImportadorXsd.DAO
{
    using System.Data;
    using System.Data.SqlClient;
    using System.Text;
    
    internal static class SqlCommandExtensions
    {
        public static void AddParametrosControlErrores(this SqlCommand command)
        {
            command.Parameters.AddRange(new[]
                                                {
                                                    new SqlParameter
                                                    {
                                                        Direction = ParameterDirection.Output,
                                                        ParameterName = "@CódigoRetorno",
                                                        SqlDbType = SqlDbType.Int
                                                    },

                                                    new SqlParameter
                                                    {
                                                        Direction = ParameterDirection.Output,
                                                        ParameterName = "@MensajeRetorno",
                                                        Size = 100,
                                                        SqlDbType = SqlDbType.NVarChar
                                                    }
                                                });
        }

        public static int CodigoRetorno(this SqlCommand command)
        {
            return (int) command.Parameters["@CódigoRetorno"].Value;
        }

        public static string MensajeRetorno(this SqlCommand command)
        {
            return (string)command.Parameters["@MensajeRetorno"].Value;
        }

        public static void CheckError(this SqlCommand command)
        {
            var codigoRetorno = (int) command.Parameters["@CódigoRetorno"].Value;

            if (codigoRetorno != 0)
            {
                var descripcionError = new StringBuilder()
                    .AppendFormat("Ocurrió un error en llamada a procedimiento {0}.", command.CommandText)
                    .AppendFormat("@CódigoRetorno = {0}, @MensajeRetorno = {1}", command.CodigoRetorno(), command.MensajeRetorno())
                    .ToString();

                throw new DataException(descripcionError);
            }
        }
    }
}
