// 
// Copyright 2016 Agencia Estatal de Administración Tibutaria
//
// Licencia con arreglo a la EUPL, Versión 1.1 o -en cuanto
// sean aprobadas por la Comisión Europea- versiones
// posteriores de la EUPL (la «Licencia»);
// Solo podrá usarse esta obra si se respeta la Licencia.
// Puede obtenerse una copia de la Licencia en:
//  
// https://joinup.ec.europa.eu/software/page/eupl
//  
// Salvo cuando lo exija la legislación aplicable o se acuerde
// por escrito, el programa distribuido con arreglo a la
// Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
// DE NINGÚN TIPO, ni expresasni implícitas.
//
// Véase la Licencia en el idioma concreto que rige los permisos y 
// limitaciones que establece la Licencia.
// 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace InstaladorATENEO
{
    public partial class FTablas : Form
    {
        DataTable dt;
        string pass;
       public string nuevabd = "";
    
        public FTablas(string _pass)
        {
            InitializeComponent();
            pass = _pass;
            dt = new DataTable();
            inicio();
            if (dt.Rows.Count < 1)
            {
                textBox1.Text = "ateneo";
            }
        }
        void inicio()
        {
            string sCnn;
            sCnn = "data source =localhost\\Ateneo; initial catalog = Master; user id = sa; password =" + pass;
         //   string sSel = "select Name,Filename,cmptlevel,crdate from master.dbo.sysdatabases WHERE name LIKE 'ateneo%'";
            string sSel = "select Name,Filename,cmptlevel,crdate from master.dbo.sysdatabases WHERE dbid > 4";

            SqlDataAdapter da;

            dt.Clear();
            try
            {
                da = new SqlDataAdapter(sSel, sCnn);
              
                da.Fill(dt);

                this.dataGridView1.DataSource = string.Empty;
                this.dataGridView1.DataSource = dt;
              
                // LabelInfo.Text = String.Format("Total datos en la tabla: {0}", dt.Rows.Count);
            }
            catch (Exception ex)
            {
                // LabelInfo.Text = "Error: " + ex.Message;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Length < 1)
            {
                MessageBox.Show("Nombre no valido");
                nuevabd = "";
                return;
            }
            string bb = textBox1.Text.ToUpper();
            foreach (DataRow row in dt.Rows)
            {

                if (row["Name"].ToString().ToUpper() == bb)
                {
                    MessageBox.Show("Base de datos ya creada.\nPara reinstalar separararla primero de Sql Server");
                    nuevabd = "";
                    return;
                }
            }
            nuevabd = bb.ToLower();
            this.Close();
        }

        private void separarUnaBaseDeDatosEnSQLServerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                string nom = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("OSQL.exe", @"-Usa -P" + pass + " -Slocalhost\\Ateneo");
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardInput = true;
                psi.RedirectStandardError = true;
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);

                proc.StandardInput.WriteLine(@"sp_detach_db '" + nom + "', 'true'");
                // proc.StandardInput.WriteLine(@"sp_addsrvrolemember 'ServidorAteneo', 'sysadmin'");
                proc.StandardInput.WriteLine(@"GO");
                proc.StandardInput.WriteLine(@"DBCC TRACEON(1807,-1)");
                proc.StandardInput.WriteLine(@"GO");
                proc.StandardInput.WriteLine(@"EXIT");
                string line2 = proc.StandardOutput.ReadToEnd();
                string[] line3 = line2.Split('\n');
                proc.Close();
                inicio();
                Cursor.Current = Cursors.Default;
                Application.DoEvents();
                foreach (DataRow row in dt.Rows)
                {

                    if (row["Name"].ToString().ToUpper() == nom.ToUpper())
                    {
                        MessageBox.Show("No se pudo separar "+ nom +"\nPuede que este siendo utilizada.\n"+ line2);
                        return;
                    }
                }
                Application.DoEvents();


            }
            catch (Exception)
            {
                
             
            }
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            try
            {
                string nom = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                if ( nom.Length < 1 )return;
                Opcion1.Text = "Separar " +nom + " de SQL Server";

            }
            catch (Exception)
            {


            }
        }
    }
}
