/* ALLA GET-METODER. HÄMTAR DATA FRÅN DATABASERNA
         * Beskrivning: Dessa metoder hämtar data från databaserna AnnonsDB och PrenumeranterDB.
         */

        /* Metod: GetAllaAds
         * Beskrivning: Denna metod hämtar alla annonser som finns i databasen AnnonsDB
         * Returnerar: En lista med alla annonser
         */
        public List <Ads> GetAllaAds(out string errormsg)
        {
            SqlConnection dbConnection = new SqlConnection
            {
                ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AnnonsDB;Integrated Security=True"
            };

            string sqlString = "SELECT * FROM Tbl_Ads";

            SqlCommand dbCommand = new SqlCommand(sqlString, dbConnection);

            SqlDataAdapter adapter = new SqlDataAdapter(dbCommand);
            DataSet        ds      = new DataSet();

            List <Ads> annonserList = new List <Ads>();

            try
            {
                dbConnection.Open();
                adapter.Fill(ds, "AdsTbl");

                int count = 0;
                int i     = 0;
                count = ds.Tables["AdsTbl"].Rows.Count;

                if (count > 0)
                {
                    while (i < count)
                    {
                        Ads annonser = new Ads();
                        annonser.Ad_Id         = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_Id"]);
                        annonser.Ad_Annonsor   = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_Annonsor"]);
                        annonser.Ad_Rubrik     = ds.Tables["AdsTbl"].Rows[i]["Ad_Rubrik"].ToString();
                        annonser.Ad_Innehall   = ds.Tables["AdsTbl"].Rows[i]["Ad_Innehall"].ToString();
                        annonser.Ad_VaransPris = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_VaransPris"]);
                        annonser.Ad_AnnonsPris = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_AnnonsPris"]);

                        i++;
                        annonserList.Add(annonser);
                    }
                    errormsg = "Alla annonser gick inte att hämta!";
                    return(annonserList);
                }
                else
                {
                    errormsg = "Det hämtas ingen annons. Kontrollera id:et igen!";
                    return(null);
                }
            }
            catch (Exception e)
            {
                errormsg = e.Message;
                return(null);
            }
            finally
            {
                dbConnection.Close();
            }
        }
        /* Metod: GetAd
         * Beskrivning: Denna metod hämtar en annons som finns i databasen AnnonsDB
         * Returnerar: En specifik annons baserat på id
         */
        public Ads GetAd(int id, out string errormsg)
        {
            SqlConnection dbConnection = new SqlConnection
            {
                ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AnnonsDB;Integrated Security=True"
            };

            string sqlString = "SELECT * FROM Tbl_Ads WHERE Ad_Id = @Ad_Id";

            SqlCommand dbCommand = new SqlCommand(sqlString, dbConnection);

            dbCommand.Parameters.Add("Ad_Id", SqlDbType.Int).Value = id;

            SqlDataAdapter adapter = new SqlDataAdapter(dbCommand);

            DataSet ds = new DataSet();

            try
            {
                dbConnection.Open();
                adapter.Fill(ds, "AdsTbl");

                int count = 0;
                int i     = 0;
                count = ds.Tables["AdsTbl"].Rows.Count;

                if (count > 0)
                {
                    Ads annons = new Ads();
                    annons.Ad_Id         = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_Id"]);
                    annons.Ad_Annonsor   = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_Annonsor"]);
                    annons.Ad_Rubrik     = ds.Tables["AdsTbl"].Rows[i]["Ad_Rubrik"].ToString();
                    annons.Ad_Innehall   = ds.Tables["AdsTbl"].Rows[i]["Ad_Innehall"].ToString();
                    annons.Ad_VaransPris = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_VaransPris"]);
                    annons.Ad_AnnonsPris = Convert.ToInt32(ds.Tables["AdsTbl"].Rows[i]["Ad_AnnonsPris"]);

                    errormsg = "Annonsen med det angivna id:et hämtas inte!";
                    return(annons);
                }
                else
                {
                    errormsg = "Det hämtas ingen annons. Kontrollera id:et igen!";
                    return(null);
                }
            }
            catch (Exception e)
            {
                errormsg = e.Message;
                return(null);
            }
            finally
            {
                dbConnection.Close();
            }
        }
        /* ALLA PUT-METODER. UPPDATERAR DATA I DATABASEN
         * Beskrivning: En metod som uppdaterar/ändrar en annons i databasen AnnonsDB
         */

        /* Metod: PutAd
         * Beskrivning: Denna metod uppdaterar/ändrar en annons baserat på id
         * Returnerar: Den uppdaterade annonsen
         */
        public int PutAd(int id, Ads ad, out string errormsg)
        {
            SqlConnection dbConnection = new SqlConnection
            {
                ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AnnonsDB;Integrated Security=True"
            };

            string sqlString = "UPDATE Tbl_Ads " +
                               "SET Ad_Rubrik = @Ad_Rubrik, Ad_VaransPris = @Ad_VaransPris, Ad_Innehall = @Ad_Innehall " +
                               "WHERE Ad_Id = @Ad_Id";

            SqlCommand dbCommand = new SqlCommand(sqlString, dbConnection);

            dbCommand.Parameters.Add("Ad_Id", SqlDbType.Int).Value = id;
            dbCommand.Parameters.Add("Ad_Rubrik", SqlDbType.NVarChar, 50).Value    = ad.Ad_Rubrik;
            dbCommand.Parameters.Add("Ad_VaransPris", SqlDbType.Int).Value         = ad.Ad_VaransPris;
            dbCommand.Parameters.Add("Ad_Innehall", SqlDbType.NVarChar, 500).Value = ad.Ad_Innehall;

            try
            {
                dbConnection.Open();
                int i = 0;
                i = dbCommand.ExecuteNonQuery();
                if (i == 1)
                {
                    errormsg = "";
                }
                else
                {
                    errormsg = "Det gick inte att uppdatera annonsen!";
                }
                return(i);
            }
            catch (Exception e)
            {
                errormsg = e.Message;
                return(0);
            }
            finally
            {
                dbConnection.Close();
            }
        }
        /* ALLA POST-METODER. LÄGGER TILL DATA I DATABASEN
         * Beskrivning: Dessa metoder lägger till en annonsör och en annons i databasen AnnonsDB
         */

        /* Metod: PostAd
         * Beskrivning: Denna metod lägger till en annons i databasen AnnonsDB
         * Returnerar: Den nya annonsen som har lagts till
         */
        public int PostAd(Ads ad, out string errormsg)
        {
            SqlConnection dbConnection = new SqlConnection
            {
                ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AnnonsDB;Integrated Security=True"
            };

            string sqlString = "INSERT INTO Tbl_Ads (Ad_Rubrik, Ad_Annonsor, Ad_Innehall, Ad_VaransPris, Ad_AnnonsPris) " +
                               "VALUES (@Ad_Rubrik, @Ad_Annonsor, @Ad_Innehall, @Ad_VaransPris, @Ad_AnnonsPris)";

            SqlCommand dbCommand = new SqlCommand(sqlString, dbConnection);

            dbCommand.Parameters.Add("Ad_Rubrik", SqlDbType.NVarChar, 50).Value    = ad.Ad_Rubrik;
            dbCommand.Parameters.Add("Ad_Annonsor", SqlDbType.Int).Value           = ad.Ad_Annonsor;
            dbCommand.Parameters.Add("Ad_Innehall", SqlDbType.NVarChar, 500).Value = ad.Ad_Innehall;
            dbCommand.Parameters.Add("Ad_VaransPris", SqlDbType.Int).Value         = ad.Ad_VaransPris;
            dbCommand.Parameters.Add("Ad_AnnonsPris", SqlDbType.Int).Value         = ad.Ad_AnnonsPris;

            try
            {
                dbConnection.Open();
                int i = 0;
                i = dbCommand.ExecuteNonQuery();
                if (i == 1)
                {
                    errormsg = "";
                }
                else
                {
                    errormsg = "Det skapas ingen ny annons i databasen!";
                }
                return(i);
            }
            catch (Exception e)
            {
                errormsg = e.Message;
                return(0);
            }
            finally
            {
                dbConnection.Close();
            }
        }