namespace Generator_Class_BD.Clases.Transversales.Modelo
{
    using Generator_Class_BD.Clases.Consultas;
    using Generator_Class_BD.Clases.Utilitarios;
    using System.Data;
    using System.Text;

    public class ClaseModelo
    {
        internal static void GenerarModelo(string vNombreClase, string path, DataSet dsCol, string TxtSolucion, string autor, string company)
        {
            StringBuilder cuerpo = new StringBuilder();
            UtilitariosTransversales.EncabezadoDerechosAutor(vNombreClase, cuerpo, autor, company);
            cuerpo.Append("namespace " + TxtSolucion + ".API.Models.Repositorio\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + string.Format(ConstantesComunes.LibreriaDTORepositorioIC, TxtSolucion) + "\n");
            cuerpo.Append("\t" + ConstantesComunes.LibreriaSystem + "\n");
            cuerpo.Append("\n");

            cuerpo.Append("\t/// <summary>\n");
            cuerpo.AppendFormat("\t/// clase para las propiedades de la entidad {0}\n", vNombreClase);
            cuerpo.Append("\t/// </summary>\n");
            cuerpo.Append("\tpublic class " + vNombreClase + " : 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\tpublic " + Util.ConvertirTipo(row["data_type"].ToString(), row["is_nullable"].ToString()) + " " + row["column_name"].ToString() + " { get; set; }\n\n");
                }
            }
            cuerpo.Append("\t}\n");
            cuerpo.Append("}");

            path = path + "\\Models\\Repositorio";

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

        internal static void GenerarModelsConsulta(Consulta consulta, string path, string TxtSolucion, string autor, string company)
        {
            StringBuilder cuerpo = new StringBuilder();
            UtilitariosTransversales.EncabezadoDerechosAutor(consulta.NombreObjeto, cuerpo, autor, company);
            cuerpo.Append("namespace " + TxtSolucion + ".API.Models\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + string.Format(ConstantesComunes.LibreriaDTORepositorioIC, TxtSolucion) + "\n");
            cuerpo.Append("\t" + ConstantesComunes.LibreriaSystem + "\n");
            cuerpo.Append("\n");
            cuerpo.Append("\tpublic class " + consulta.NombreObjeto + " : I" + consulta.NombreObjeto + "DTO\n");
            cuerpo.Append("\t{\n");

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

            path = path + "\\Models";

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