using System.Collections.Generic;
using System.Data;

namespace Consulenza.ReportModeler.Business.Base.Proposta
{
    /// <summary>
    /// Classe di business per che si interfaccia con il database di ConsulenzaBase 
    /// e che si occupa di recuperare le informazioni legate alla logica di modellazione del report (ReportModeler).
    /// </summary>
    public class ReportStructBusiness
    {
        /// <summary>
        /// Recupera l'id del report.
        /// E' definito a livello di database. Campo ID di [ReportModeler2].[dbo].[Report]
        /// </summary>
        /// <returns></returns>
        public int GetIdReport()
        {
            return 1;
        }

        /// <summary>
        /// Recupera l'id del modello in funzione dello stato di adeguatezza della proposta.
        /// L'id del modello per il report di Proposta di ConsulenzaBase è determinato dallo stato di adeguatezza della proposta il cui id è passato in input.
        /// Eseguendo la stored "REP_CheckStatoProposta_Adeguata" avrò idmodello = 1 per la proposta in stato "ADEGUATA", idmodello = 2 per proposta "NON ADEGUATA".
        /// </summary>
        /// <param name="chiaveCliente">chiave del cliente (ChiaveClientePB)</param>
        /// <param name="chiaveProposta">chiave della proposta</param>
        /// <returns></returns>
        public int GetIdModel(long chiaveCliente, int chiaveProposta, bool unica)
        {
            int idModel;
            var parametri = new List<Parametro>();

            #region Definizione dei parametri
            parametri.Clear();

            var parametro = new Parametro
            {
                Direction = ParameterDirection.Input,
                DbType = DbType.Int64,
                ParameterName = "ChiaveClientePB",
                Value = chiaveCliente
            };
            parametri.Add(parametro);

            parametro = new Parametro
            {
                Direction = ParameterDirection.Input,
                DbType = DbType.Int32,
                ParameterName = "ChiaveProposta",
                Value = chiaveProposta
            };
            parametri.Add(parametro);

            #endregion

            var dtEsitoAdeguatezza = unica ? DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_CheckStatoProposta_Adeguata", parametri)
                : DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaBase, "REP_CheckStatoProposta_Adeguata", parametri);

            var codice = dtEsitoAdeguatezza.Rows[0]["STATO_ADEGUATEZZA"].ToString();

            if (!codice.Equals(string.Empty))
            {
                idModel = codice.Equals("ADEGUATA") ? 1 : 2;
            }
            else
            {
                idModel = 2; // Fisso definito a livello database
            }

            return idModel;
        }
        public int GetIdModelBaseUnica(long chiaveCliente, int chiaveProposta)
        {
            int idModel;
            var parametri = new List<Parametro>();

            #region Definizione dei parametri
            parametri.Clear();

            var parametro = new Parametro
            {
                Direction = ParameterDirection.Input,
                DbType = DbType.Int64,
                ParameterName = "ChiaveClientePB",
                Value = chiaveCliente
            };
            parametri.Add(parametro);

            parametro = new Parametro
            {
                Direction = ParameterDirection.Input,
                DbType = DbType.Int32,
                ParameterName = "ChiaveProposta",
                Value = chiaveProposta
            };
            parametri.Add(parametro);

            #endregion

            var dtEsitoAdeguatezza = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_CheckStatoProposta_Adeguata", parametri);

            var codice = dtEsitoAdeguatezza.Rows[0]["STATO_ADEGUATEZZA"].ToString();

            if (!codice.Equals(string.Empty))
            {
                idModel = codice.Equals("ADEGUATA") ? 1 : 2;
            }
            else
            {
                idModel = 2; // Fisso definito a livello database
            }

            return idModel;
        }
    }
}
