using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows;
using System.Windows.Forms;
namespace Kormann
{
    public static class DBOperations
    {
        //
        // Beginn Schritt 3 im Sequenzdiagramm HerstellerAnzeige
        //
        public static ArrayList GetHersteller()
        {
            ArrayList lst = new ArrayList();
            lst.Add(new HerstellerInfo("", ""));
            //
            // Beginn Schritt 4 im Sequenzdiagramm HerstellerAnzeige
            //
            SqlConnection conn = new SqlConnection(Properties.Settings.Default.conHRL);
            string query = @"SELECT  
                               tblHersteller.HSN,  
                               tblHersteller.Hersteller  
                             FROM tblHersteller   
                             ORDER BY Hersteller ASC";

            SqlCommand cmd = new SqlCommand(query, conn);
            try
            {
                conn.Open();
                //
                // Beginn Schritt 5 im Sequenzdiagramm HerstellerAnzeige
                //
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    string hsn = dr.GetString(0);
                    string hersteller = dr.GetString(1);

                    lst.Add(new HerstellerInfo(hsn, hersteller));
                }
                dr.Close();
                //
                // Ende Schritt 5 im Sequenzdiagramm HerstellerAnzeige
                //
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
                //
                // Ende Schritt 4 im Sequenzdiagramm HerstellerAnzeige
                //
            }

            return lst;
            //
            // Ende Schritt 3 im Sequenzdiagramm HerstellerAnzeige
            //
        }

        public static ArrayList GetModelle(HerstellerInfo hersteller)
        {
            ArrayList lstModelle = new ArrayList();
            lstModelle.Add(new ModellInfo(0, "", ""));
            
            SqlConnection conn = new SqlConnection(Properties.Settings.Default.conHRL);
            string query = @"SELECT 
                              m.ModellID,  
                              m.Bezeichnung  
                             FROM tblFahrzeugmodell m    
                             WHERE m.HSN = @HSN";

            SqlCommand cmd = new SqlCommand(query, conn);
            cmd.Parameters.Add("@HSN", SqlDbType.NChar, 4);
            cmd.Parameters["@HSN"].Value = hersteller.Hsn;
            try
            {
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    int id = dr.GetInt32(0);
                    string bez = dr.GetString(1);

                    lstModelle.Add(new ModellInfo(id, bez, hersteller.Hsn));
                }
                dr.Close();
            }
            catch (Exception ex)
            {
                throw ex;

            }
            finally
            {
                conn.Close();
            }

            return lstModelle;
        }
        public static ArrayList GetArtikelgruppen(string pText)
        {
            ArrayList lstAGr = new ArrayList();
            lstAGr.Add(new ArtikelgruppenInfo("", ""));

            SqlConnection conn = new SqlConnection(Properties.Settings.Default.conHRL);
            string query = @"SELECT  
                               tblArtikelgruppe.Artikelgruppe,  
                               tblArtikelgruppe.Klartext  
                             FROM tblArtikelgruppe
                             WHERE tblArtikelgruppe.Klartext LIKE ";
            query=query+pText + " ORDER BY tblArtikelgruppe.Klartext ASC ";

            SqlCommand cmd = new SqlCommand(query, conn);
            
         //

            try
            {
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    string agr = dr.GetString(0);
                    string artikelgruppe = dr.GetString(1);

                    lstAGr.Add(new ArtikelgruppenInfo(agr, artikelgruppe));
                }
                dr.Close();
                return lstAGr;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            
        }
        public static ArrayList GetArtikel(HerstellerInfo h, ModellInfo m, ArtikelgruppenInfo a)
        {
            ArrayList lstArt = new ArrayList();
           // lstArt.Add(new ArtikelInfo(0,"",0.0,0,""));
            SqlConnection con = new SqlConnection(Properties.Settings.Default.conHRL);

            string sql = @"
                                SELECT DISTINCT [tblArtikel].[ArtikelID]
                                      ,[tblArtikel].[Artikelbezeichnung]
                                      ,[tblArtikel].[Preis]
                                      ,[tblArtikel].[Mindestbestand]
                                      ,tblLieferant.[Lieferant]
                                     
                                  FROM (([HRL].[dbo].[tblArtikel] INNER JOIN tblLieferant
                                        ON tblArtikel.LieferantID=tblLieferant.LieferantId)
                                        INNER JOIN tblArtikelModell ON 
                                            tblArtikelModell.ArtikelID=tblArtikel.ArtikelID)
                                         INNER JOIN tblFahrzeugmodell ON
                                tblFahrzeugmodell.ModellID =tblArtikelModell.ModellID
                                 WHERE ";
            string Bedingung = " 1=1 ";
           
                //HerstellerInfo h = (HerstellerInfo)cbxHersteller.SelectedItem;
                //string HSN = cbxHersteller.SelectedValue.ToString();
                string HSN = h.Hsn;
                if (HSN.Trim().Length > 0)
                {
                    Bedingung = Bedingung + " AND tblFahrzeugmodell.HSN = '" + HSN + "'";
                }
            
           
                //ModellInfo m = (ModellInfo)cbxModell.SelectedItem;
                //string MId = cbxModell.SelectedValue.ToString();
                if (m.ModellID > 0)
                {
                    string MId = m.ModellID.ToString();
                    if (MId.Trim().Length > 0)
                    {
                        Bedingung = Bedingung + " AND tblFahrzeugmodell.ModellId = " + MId;
                    }
                }
            

            string agr = a.Artikelgruppe;
            if (agr.Trim().Length>0)
            {
                Bedingung = Bedingung + " AND tblArtikel.Artikelgruppe = '"+agr.Trim()+"'";
            }
            sql = sql + Bedingung;
            SqlCommand cmd = new SqlCommand(sql, con);

            try
            {
                con.Open();
                SqlDataReader dr1 = cmd.ExecuteReader();
                while (dr1.Read())
                {

                    int artikelID = 0;
                    string artikelbezeichnung = "";
                    double preis = 0.0;
                    int mindestbestand = 0;
                    string lieferant = "";
                    if (dr1.GetValue(0) != DBNull.Value)
                    {
                        artikelID = (int)dr1.GetInt32(0);
                    }
                    if (dr1.GetValue(1) != DBNull.Value)
                    {
                        artikelbezeichnung = dr1.GetValue(1).ToString();
                    }
                    if (dr1.GetValue(2) != DBNull.Value)
                    {
                        preis = Convert.ToDouble(dr1.GetValue(2));
                    }
                    if (dr1.GetValue(3) != DBNull.Value)
                    {
                        mindestbestand = (int)dr1.GetInt32(3);
                    }
                    if (dr1.GetValue(4) != DBNull.Value)
                    {
                        lieferant = dr1.GetValue(4).ToString();
                    }
  
                    
                    lstArt.Add(new ArtikelInfo(artikelID, artikelbezeichnung, preis, mindestbestand,lieferant));
                }
                dr1.Close();
                
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
            return lstArt;
        }
    }
}
