using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.CodeDom.Compiler;

namespace _2024Ado
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private SqlConnection sqlconn = new SqlConnection();
        private DataSet monDataSet = new DataSet();
        
        //code des contrôls (Événement)
        private void connect_Click(object sender, EventArgs e)
        {
            connecter();
        }

        private void fermer_Click(object sender, EventArgs e)
        {
            sqlconn.Close();
            Application.Exit();
        }

        private void afficherToutesQuestions_Click(object sender, EventArgs e)
        {
            afficherToutes();
        }

        private void comboListeCategorie_SelectedIndexChanged(object sender, EventArgs e)
        {
            afficherSelonCategorie();
        }

        private void btnEnonce_Click(object sender, EventArgs e)
        {
            afficherSelonEnonce();
        }
        //----------------------------------------------------------
        //Code des fonctions 
        private void connecter()
        {
            try
            {
                string user = textUser.Text;
                string mpasse = textMpasse.Text;
                string chaineConnexion = $"Data source =M-INFO-SY1\\SQLEXPRESS;Initial Catalog=BDTrivia ;User Id = {user}; password = {mpasse}";
                sqlconn.ConnectionString = chaineConnexion;
                sqlconn.Open();
                MessageBox.Show(sqlconn.State.ToString());
                afficherCategorie();
            }
            catch(Exception exsql1) { MessageBox.Show(exsql1.Message.ToString()); }
        }
        //--------------------------------------------
        private void afficherCategorie() 
        {
            string sql = "select nomcategorie from CategorieTrivia";
            SqlCommand  cmdCategorie = new SqlCommand(sql, sqlconn);
            SqlDataReader listeCategorie = cmdCategorie.ExecuteReader();
            while (listeCategorie.Read())
            {
                comboListeCategorie.Items.Add(listeCategorie.GetString(0));
            }
            listeCategorie.Close();
            comboListeCategorie.SelectedIndex = 0;
        }
        private void afficherSelonEnonce()
        {
            SqlCommand cmdQuestion = new SqlCommand("QuestionSelonEnonce", sqlconn);
            cmdQuestion.CommandText = "QuestionSelonEnonce";
            cmdQuestion.CommandType = CommandType.StoredProcedure;
            // on declare les paramètre
            SqlParameter parmenonce = new SqlParameter("@enonce", SqlDbType.VarChar, 30);
            parmenonce.Direction = ParameterDirection.Input;
            // on donne la valeur au parmètre
            parmenonce.Value = textEnonce.Text;
            cmdQuestion.Parameters.Add(parmenonce);
            //on prépare le SqlDataAdapter. On lui passe le SqlCommand pour
            // exécuter la procédure
            SqlDataAdapter adapterQenonce = new SqlDataAdapter(cmdQuestion);
            // on rempli le DataSet si celui-ci ne contient pas déjà les données
            //la chaine de caractères corresond à un nom de table du DataSet correspondant
                //à votre requête SELECT de la procédure
        if (monDataSet.Tables.Contains("ListeQuestionsEnonce"))
            {
                monDataSet.Tables["ListeQuestionsEnonce"].Clear();
            }
            adapterQenonce.Fill(monDataSet, "ListeQuestionsEnonce");
            adapterQenonce.Dispose();
            BindingSource maSource;
            maSource = new BindingSource(monDataSet, "ListeQuestionsEnonce");
            DGVQuestions.DataSource = maSource;
        }

        private void afficherSelonCategorie()
        {
            SqlCommand cmdQuestion = new SqlCommand("listeQuestion", sqlconn);
            cmdQuestion.CommandText = "listeQuestion";
            cmdQuestion.CommandType = CommandType.StoredProcedure;
            // on declare les paramètre
            SqlParameter parmnomCategorie = new SqlParameter("@nomcategorie",
            SqlDbType.VarChar, 30);
            parmnomCategorie.Direction = ParameterDirection.Input;
            // on donne la valeur au parmètre
            parmnomCategorie.Value = comboListeCategorie.Text;
            cmdQuestion.Parameters.Add(parmnomCategorie);
            //on prépare le SqlDataAdapter. On lui passe le SqlCommand pour
            //exécuter la procédure
            SqlDataAdapter adapterQCat = new SqlDataAdapter(cmdQuestion);
            // on rempli le DataSet si celui-ci ne contient pas déjà les données
            //la chaine de caractères corresond à un nom de table du
            //DataSet correspondant à votre requête SELECT de la procédure
            if (monDataSet.Tables.Contains("ListeQuestionsCategorie"))
            {
                monDataSet.Tables["ListeQuestionsCategorie"].Clear();
            }
            adapterQCat.Fill(monDataSet, "ListeQuestionsCategorie");
            adapterQCat.Dispose();
            BindingSource maSource;
            maSource = new BindingSource(monDataSet, "ListeQuestionsCategorie");
            DGVQuestions.DataSource = maSource;
        }
        private void afficherToutes()
        {
            string sql = "select * from listeToutesQuestions()";
            SqlCommand cmdQuestion = new SqlCommand(sql, sqlconn);
            SqlDataAdapter adapter = new SqlDataAdapter(cmdQuestion);
            // on rempli le DataSet si celui-ci ne contient pas déjà les données
            //la chaine de caractères corresond à un nom de table du
            //DataSet correspondant à votre requête SELECT de la procédure
           if (monDataSet.Tables.Contains("Listedetoutelesquestions"))
                {
                    monDataSet.Tables["Listedetoutelesquestions"].Clear();
                }
            adapter.Fill(monDataSet, "Listedetoutelesquestions");
            adapter.Dispose();
            BindingSource maSource;
            maSource = new BindingSource(monDataSet, "Listedetoutelesquestions");
            DGVQuestions.DataSource = maSource;
        }

        
    }
}
