namespace Generator_Class_BD.Clases.Transversales.BO
{
    using Generator_Class_BD.Clases.Consultas;
    using Generator_Class_BD.Clases.Utilitarios;
    using System.Data;
    using System.Globalization;
    using System.Text;
    using System.Threading;
    public class ClaseBO
    {

        internal static void GenerarBO(string vNombreClase, DataSet dsCol, string txtRuta, string TxtSolucion, string autor, string company)
        {
            string path = "";
            path = txtRuta + "\\2. Negocio\\" + TxtSolucion + ".Negocio\\Clases\\BO\\Repositorio";

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

            string vNombreClaseO = "I" + vNombreClase + "DTO";

            StringBuilder cuerpo = new StringBuilder();
            UtilitariosTransversales.EncabezadoDerechosAutor(vNombreClase + "BO", cuerpo, autor, company);
            cuerpo.Append("namespace " + TxtSolucion + ".Negocio.Clases.BO.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.Append("\t/// clase para las propiedades de la entidad " + vNombreClase + "\n");
            cuerpo.Append("\t/// </summary>\n");
            cuerpo.Append("\tpublic class " + vNombreClase + "BO : " + vNombreClaseO + "\n");
            cuerpo.Append("\t{\n");

            foreach (DataRow row in dsCol.Tables[0].Rows)//generando los atributos
            {
                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" + "public " + Util.ConvertirTipo(row["data_type"].ToString(), row["is_nullable"].ToString()) + " " + row["column_name"].ToString() + " { get; set; }\n\n");
                }
            }
            cuerpo.Append("\t}\n");
            cuerpo.Append("}");

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

        internal static void GenerarBOConsultas(Consulta consulta, string txtRuta, string TxtSolucion, string autor, string company)
        {
            string path = "";
            path = txtRuta + "\\4. Negocio\\" + TxtSolucion + ".Negocio\\Clases\\BO\\Consulta";

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

            string vNombreClaseO = "I" + consulta.NombreObjeto + "DTO";

            StringBuilder cuerpo = new StringBuilder();
            UtilitariosTransversales.EncabezadoDerechosAutor(consulta.NombreObjeto + "BO", cuerpo, autor, company);
            cuerpo.Append("namespace " + TxtSolucion + ".Negocio.Clases.BO.Consulta\n");
            cuerpo.Append("{\n");
            cuerpo.Append("\t" + string.Format(ConstantesComunes.LibreriaConsultaIC, TxtSolucion) + "\n");
            cuerpo.Append("\t" + ConstantesComunes.LibreriaSystem + "\n");
            cuerpo.Append("\n");
            cuerpo.Append("\tpublic class " + consulta.NombreObjeto + "BO : " + vNombreClaseO + "\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("\n");
                });
            });

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

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