using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using System.Data;
using System.ComponentModel;
using Oracle.DataAccess.Client;
using System.Configuration;

namespace VEtterem.Kosar
{

    public class Kosar
    {
        public List<KosarTetel> Tetelek { get; private set; } //Lista, ami a tételeket tartalmazza

        public Kosar()
        {
            Tetelek = new List<KosarTetel>();
        }

        public void Berak(int eID, string nev, int ar, int db)
        {
            KosarTetel ujTetel = new KosarTetel(eID, nev, ar, db);

            foreach (KosarTetel kt in Tetelek)
            {
                if (kt.EID == ujTetel.EID)
                {
                    kt.Mennyiseg += db;
                    return;
                }
            }
            Tetelek.Add(ujTetel);
        }

        public void MennyisegValtoztat(int eID, int db)
        {
            if (db <= 0)
            {
                Kiszed(eID);
                return;
            }


            foreach (KosarTetel kt in Tetelek)
            {
                if (kt.EID == eID)
                {
                    kt.Mennyiseg = db;
                    return;
                }
            }
        }

        public void Kiszed()
        {
            Tetelek.Clear();
        }

        public void Kiszed(int eID)
        {
            foreach (KosarTetel kt in Tetelek)
            {
                if (kt.EID == eID)
                {
                    Tetelek.Remove(kt);
                    return;
                }
            }
        }

        public int Osszesen()
        {
            int osszesen = 0;
            foreach (KosarTetel kt in Tetelek)
                osszesen += kt.ReszOsszeg;
            return osszesen;
        }

        public int OsszesenAkc()
        {
            int minAr = int.MaxValue;
            int tmpMinAr = int.MaxValue;
            int osszesen = 0;


            foreach (KosarTetel kt in Tetelek)
                osszesen += kt.ReszOsszeg;

            using (OracleConnection oc = new OracleConnection())
            {
                oc.ConnectionString = ConfigurationManager.ConnectionStrings["VCS"].ConnectionString;

                OracleCommand ocmd = new OracleCommand(
                    "select ak.kezdet, ak.veg, kezdoora, vegora, ak.kedvezmeny " +
                        " from idoszakos_akcio ia join akcio ak on ia.akcio = ak.akcioid", oc);
                oc.Open();
                DateTime most = DateTime.Now;
                using (OracleDataReader odr = ocmd.ExecuteReader())
                {

                    while (odr.Read())
                    {
                        DateTime kezdDT = odr.GetDateTime(0);
                        DateTime vegDT = odr.GetDateTime(1);
                        int ko = (int)odr.GetDecimal(2);
                        int vo = (int)odr.GetDecimal(3);
                        int kedv = (int)odr.GetDecimal(4);

                        if (kezdDT < most && most < vegDT &&
                            ko <= most.Hour && most.Hour < vo)
                        {
                            tmpMinAr = (int)(osszesen * (1 - (double)kedv / 100));
                            if (tmpMinAr < minAr)
                            {
                                minAr = tmpMinAr;
                            }

                        }
                    }
                }

                tmpMinAr = int.MaxValue;
                ocmd.CommandText = "select ak.kezdet, ak.veg, pa.cikk, ak.kedvezmeny " +
                    " from akcio ak join pillanatnyi_akcio pa on ak.akcioid = pa.akcio";
                int tmposszesen = 0;
                using (OracleDataReader odr = ocmd.ExecuteReader())
                {
                    while (odr.Read())
                    {
                        DateTime kezdDT = odr.GetDateTime(0);
                        DateTime vegDT = odr.GetDateTime(1);
                        int cikk = (int)odr.GetDecimal(2);
                        int kedv = (int)odr.GetDecimal(3);

                        if (kezdDT < most && most < vegDT)
                        {
                            foreach (KosarTetel kt in this.Tetelek)
                            {
                                tmposszesen +=
                                    (kt.EID == cikk) ? (int)(kt.ReszOsszeg * (1 - (double)kedv / 100)) : kt.ReszOsszeg;
                            }
                        }

                    }
                    if (tmposszesen > 0 && tmposszesen < minAr)
                    {
                        minAr = tmposszesen;
                    }
                }

                tmpMinAr = int.MaxValue;
                ocmd.CommandText = "select ak.kezdet, ak.veg, ta.etipus, ak.kedvezmeny " +
                    " from akcio ak join tipus_akcio ta on ak.akcioid = ta.akcio";
                tmposszesen = 0;
                using (OracleDataReader odr = ocmd.ExecuteReader())
                {
                    while (odr.Read())
                    {
                        DateTime kezdDT = odr.GetDateTime(0);
                        DateTime vegDT = odr.GetDateTime(1);
                        int etipus = (int)odr.GetDecimal(2);
                        int kedv = (int)odr.GetDecimal(3);

                        if (kezdDT < most && most < vegDT)
                        {
                            OracleCommand ocmd2 = new OracleCommand();
                            ocmd2.Connection = oc;
                            ocmd2.CommandText = "select e.etipus " +
                                " from etlap e join etel_tipus et on e.etipus = et.etid " +
                                " where e.etlapid = :eid";

                            foreach (KosarTetel kt in this.Tetelek)
                            {
                                ocmd2.Parameters.Clear();
                                ocmd2.Parameters.Add("eid", OracleDbType.Decimal).Value = kt.EID;
                                using (OracleDataReader odr2 = ocmd2.ExecuteReader())
                                {
                                    while (odr2.Read())
	                                {
	                                    int etelTipusID = (int)odr2.GetDecimal(0);
                                        if (etelTipusID == etipus)
                                            tmposszesen += (int)(kt.ReszOsszeg * (1 - (double)kedv / 100));
                                        else
                                            tmposszesen += kt.ReszOsszeg;    
	                                }
                                    
                                }
                            }
                        }
                    }

                    if (tmposszesen > 0 && tmposszesen < minAr)
                    {
                        minAr = tmposszesen;
                    }
                }
            }

            if (minAr == int.MaxValue)
                return osszesen;

            return minAr;
        }
    }

}



