namespace Generator_Class_BD.Clases.Transversales.DO
{
    using Generator_Class_BD.Clases.Consultas;
    using Generator_Class_BD.Clases.Utilitarios;
    using System.Globalization;
    using System.Text;
    using System.Threading;
    public class ClaseDO
    {
        internal static void GenerarDOEntidades(string vNombreClase, string txtRuta, string TxtSolucion, string autor, string company)
        {
            string path = "";

            path = txtRuta + "\\3. Datos\\" + TxtSolucion + ".Datos\\Clases\\DO\\Repositorio";

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

            StringBuilder cuerpo = new StringBuilder();
            UtilitariosTransversales.EncabezadoDerechosAutor(vNombreClase + "DO", cuerpo, autor, company);
     
            cuerpo.Append("namespace " + TxtSolucion + ".Datos.Contexto.Repositorio\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + string.Format(ConstantesComunes.LibreriaDTORepositorioIC, TxtSolucion) + "\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 partial class " + vNombreClase + " : I" + vNombreClase + "DTO\n");
            cuerpo.Append("\t{\n");
            cuerpo.Append("\t}\n");
            cuerpo.Append("}");

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

        internal static void GenerarDOConsultas(Consulta consulta, string txtRuta, string TxtSolucion, string autor, string company)
        {
            string path = "";

            path = txtRuta + "\\5. Datos\\" + TxtSolucion + ".Datos\\Clases\\DO\\Consulta";

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

            StringBuilder cuerpo = new StringBuilder();
            UtilitariosTransversales.EncabezadoDerechosAutor(consulta.NombreObjeto + "DO", cuerpo, autor, company);            
            cuerpo.Append("namespace " + TxtSolucion + ".Datos.Contexto.Consulta\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + string.Format(ConstantesComunes.LibreriaConsultaIC, TxtSolucion) + "\n");
            cuerpo.Append("/// <summary>\n");
            cuerpo.AppendFormat("/// clase para las propiedades de la entidad {0}\n", consulta.NombreObjeto);
            cuerpo.Append("/// </summary>\n");
            cuerpo.Append("\tpublic partial class " + consulta.NombreObjeto + " : I" + consulta.NombreObjeto + "DTO\n");
            cuerpo.Append("\t{\n");

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

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

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