namespace Generator_Class_BD.Clases.Transversales.DTO
{
    using Generator_Class_BD.Clases.Consultas;
    using Generator_Class_BD.Clases.Transversales;
    using Generator_Class_BD.Clases.Utilitarios;
    using System.Data;
    using System.Globalization;
    using System.Text;
    using System.Threading;
    public class ClaseDTO
    {
        public static void GenerarDTO(string vNombreClase, DataSet dsCol, string txtRuta, string TxtSolucion, string autor, string company)
        {
            string path = "";
            path = txtRuta + "\\4. Interfaces Comunes\\" + Util.CamelAPascal(TxtSolucion) + ".IC\\DTO\\Repositorio";

            CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
            TextInfo textInfo = cultureInfo.TextInfo;

            StringBuilder cuerpo = new StringBuilder();

            UtilitariosTransversales.EncabezadoDerechosAutor("I" + vNombreClase + "DTO", cuerpo, autor, company);
            cuerpo.Append("namespace "+ Util.CamelAPascal(TxtSolucion) + ".IC.DTO.Repositorio\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + ConstantesComunes.LibreriaSystem + "\n");
            cuerpo.Append("\n");
            cuerpo.Append("\t/// <summary>\n");
            cuerpo.Append("\t/// Interface que define las propiedades de " + Util.SeparadorPorMayusculas(vNombreClase) + "\n");
            cuerpo.Append("\t/// </summary>\n");
            cuerpo.Append("\tpublic interface I" + vNombreClase + "DTO\n");
            cuerpo.Append("\t{\n");

            foreach (DataRow row in dsCol.Tables[0].Rows)
            {
                if (row["data_type"].ToString() != "timestamp")
                {
                    Util.GenerarSummaryPropiedades(cuerpo, row["column_name"].ToString(), Util.ConvertirTipo(row["data_type"].ToString(), row["is_nullable"].ToString()));
                    cuerpo.Append("\t\t" + Util.ConvertirTipo(row["data_type"].ToString(), row["is_nullable"].ToString()) + " " + row["column_name"].ToString() + " { get; set; }\n");
                    if (dsCol.Tables[0].Rows.IndexOf(row) != dsCol.Tables[0].Rows.Count - 1)
                    {
                        cuerpo.Append("\n");
                    }
                }
            }
            cuerpo.Append("\t}\n");
            cuerpo.Append("}");

            Util.CrearArchivo(path + "\\I" + vNombreClase + "DTO.cs", path, cuerpo);
        }

        public static void GenerarConsultasDTO(Consulta consulta, string ruta, string nombreSolucion, string autor, string company)
        {
            string path = "";
            path = ruta + "\\6. Interfaces Comunes\\" + nombreSolucion + ".IC\\DTO\\EntidadesConsulta";

            CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
            TextInfo textInfo = cultureInfo.TextInfo;

            StringBuilder cuerpo = new StringBuilder();
            
            UtilitariosTransversales.EncabezadoDerechosAutor("I" + consulta.NombreObjeto + "DTO", cuerpo, autor, company);
            cuerpo.Append("namespace " + nombreSolucion + ".IC.DTO.Consultas\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + ConstantesComunes.LibreriaSystem + "\n");
            cuerpo.Append("\n");
            cuerpo.Append("\t/// <summary>\n");
            cuerpo.Append("\t/// Interface que define las propiedades de " + Util.SeparadorPorMayusculas(consulta.NombreObjeto) + "\n");
            cuerpo.Append("\t/// </summary>\n");
            cuerpo.Append("\tpublic interface I" + consulta.NombreObjeto + "DTO\n");
            cuerpo.Append("\t{\n");

            consulta.ListaTablasRelacionadas.ForEach(tabla =>
            {
                tabla.ListaCampos.ForEach(campo =>
                {
                    Util.GenerarSummaryPropiedades(cuerpo, campo.Nombre, Util.ConvertirTipo(campo.TipoDato, campo.Nullable));
                    cuerpo.Append("\t\t" + Util.ConvertirTipo(campo.TipoDato, campo.Nullable) + " " + campo.Nombre + " { get; set; }\n");
                    cuerpo.Append("\n");
                });
            });

            cuerpo.Append("\t}\n");
            cuerpo.Append("}");

            Util.CrearArchivo(path + "\\I" + consulta.NombreObjeto + "DTO.cs", path, cuerpo);
        }
    }
}
