using System;
using System.Collections.Generic;
using System.Text;
using Kreta.DataAccessManual.Util;

namespace Kreta.DataAccessManual.ParameterClasses
{
    public class NebuloSearchPco
    {
        public string NebuloNeveSearch { get; set; }

        public string OktatasiAzonositoSearch { get; set; }

        public string AnyjaNeveSearch { get; set; }

        public string SzuletesiHelySearch { get; set; }

        public DateTime? TolSearch { get; set; }

        public DateTime? IgSearch { get; set; }

        public int? FelvetelStatuszaSearch { get; set; }

        public int? FeladatellatasiHelyIdSearch { get; set; }

        public int? KirSzolgaltatasSearch { get; set; }

        public int? EtikaHitErkolcstanSearch { get; set; }

        public string OvodaAzonositojaVagyNeveSearch { get; set; }

        public int? EletvitelszeruOttLakasSearch { get; set; }

        public int? SzakertoiBizottsagSearch { get; set; }

        public int? SzuloTestverBetegSearch { get; set; }

        public int? TestverAdottIntezmenyTanulojaSearch { get; set; }

        public int? AzIskolaALakohelyetolSearch { get; set; }

        public int? MunkaltatoiIgazolasSearch { get; set; }

        public int? SNISearch { get; set; }

        public int? BTMSearch { get; set; }

        /// <summary>
        /// Builds contents of the where clause.
        /// </summary>
        /// <param name="parameters">Search parameters.</param>
        /// <returns>SQL where body.</returns>
        public StringBuilder ToWhere(out List<CommandParameter> parameters)
        {
            StringBuilder whereClause = new StringBuilder();
            parameters = new List<CommandParameter>();

            if (!string.IsNullOrWhiteSpace(NebuloNeveSearch))
            {
                parameters.Add(new CommandParameter(nameof(NebuloNeveSearch), NebuloNeveSearch));
                whereClause.Append($" AND NebuloNeveSearch LIKE '%'+ @{nameof(NebuloNeveSearch)} +'%'");
            }

            if (!string.IsNullOrWhiteSpace(AnyjaNeveSearch))
            {
                parameters.Add(new CommandParameter(nameof(AnyjaNeveSearch), AnyjaNeveSearch));
                whereClause.Append($" AND AnyjaNeveSearch LIKE '%'+ @{nameof(AnyjaNeveSearch)} +'%'");
            }

            if (!string.IsNullOrWhiteSpace(OktatasiAzonositoSearch))
            {
                parameters.Add(new CommandParameter(nameof(OktatasiAzonositoSearch), OktatasiAzonositoSearch));
                whereClause.Append($" AND subSelect.C_OKTATASIAZONOSITOSZAMA LIKE '%'+ @{nameof(OktatasiAzonositoSearch)} +'%'");
            }

            if (!string.IsNullOrWhiteSpace(SzuletesiHelySearch))
            {
                parameters.Add(new CommandParameter(nameof(SzuletesiHelySearch), SzuletesiHelySearch));
                whereClause.Append($" AND subSelect.C_SZULETESIHELY LIKE '%'+ @{nameof(SzuletesiHelySearch)} +'%'");
            }

            if (!string.IsNullOrWhiteSpace(TolSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pTol", TolSearch.Value));
                whereClause.Append(" AND subSelect.C_SZULETESIIDO >= CAST(:pTol AS datetime) ");
            }

            if (!string.IsNullOrWhiteSpace(IgSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pIg", IgSearch.Value));
                whereClause.Append(" AND subSelect.C_SZULETESIIDO <= CAST(:pIg AS datetime) ");
            }

            if (!string.IsNullOrWhiteSpace(FelvetelStatuszaSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pFelvetelStatusza", FelvetelStatuszaSearch.Value));
                whereClause.Append(" AND subSelect.C_FELVETELSTATUSZA = :pFelvetelStatusza");
            }

            if (!string.IsNullOrWhiteSpace(FeladatellatasiHelyIdSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pFeladatellatasiHelyId", FeladatellatasiHelyIdSearch.Value));
                whereClause.Append(" AND subSelect.C_FELADATELLATASIHELYID = :pFeladatellatasiHelyId");
            }

            if (!string.IsNullOrWhiteSpace(KirSzolgaltatasSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pKirSzolgaltatasSearch", KirSzolgaltatasSearch.Value));
                whereClause.Append(" AND subSelect.C_KIRSZOLGALTATASTIPUSID = :pKirSzolgaltatasSearch");
            }

            if (!string.IsNullOrWhiteSpace(EtikaHitErkolcstanSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pEtikaHitErkolcstan", EtikaHitErkolcstanSearch.Value));
                whereClause.Append(" AND subSelect.C_ETIKAHITERKOLCSTAN = :pEtikaHitErkolcstan");
            }

            if (!string.IsNullOrWhiteSpace(OvodaAzonositojaVagyNeveSearch))
            {
                parameters.Add(new CommandParameter(nameof(OvodaAzonositojaVagyNeveSearch), OvodaAzonositojaVagyNeveSearch));
                whereClause.Append($" AND (subSelect.C_OVODANEVE LIKE '%'+ @{nameof(OvodaAzonositojaVagyNeveSearch)}+'%' OR subSelect.C_OVODAAZONOSITO LIKE '%'+ @{nameof(OvodaAzonositojaVagyNeveSearch)}+'%')");
            }

            if (!string.IsNullOrWhiteSpace(EletvitelszeruOttLakasSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pEletvitelszeruOttLakas", EletvitelszeruOttLakasSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_ELETVITELSZERUOTTLAKASKORZET = :pEletvitelszeruOttLakas");
            }

            if (!string.IsNullOrWhiteSpace(SzakertoiBizottsagSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pSzakertoiBizottsag", SzakertoiBizottsagSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_SZAKERTOIBIZOTTSAGKORMANYHIV = :pSzakertoiBizottsag");
            }

            if (!string.IsNullOrWhiteSpace(SzuloTestverBetegSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pSzuloTestverBeteg", SzuloTestverBetegSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_SZULOJETESTVERETARTOSANBETEG = :pSzuloTestverBeteg");
            }

            if (!string.IsNullOrWhiteSpace(TestverAdottIntezmenyTanulojaSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pTestverAdottIntezmenyTanuloja", TestverAdottIntezmenyTanulojaSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_TESTVEREAZINTEZMENYTANULOJA = :pTestverAdottIntezmenyTanuloja");
            }

            if (!string.IsNullOrWhiteSpace(AzIskolaALakohelyetolSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pAzIskolaALakohelyetol", AzIskolaALakohelyetolSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_AZISKOLAALAKOHELYETOLEGYKILO = :pAzIskolaALakohelyetol");
            }

            if (!string.IsNullOrWhiteSpace(MunkaltatoiIgazolasSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pMunkaltatoiIgazolas", MunkaltatoiIgazolasSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_SZULOJENEKMUNKAHELYEAZISKOLA = :pMunkaltatoiIgazolas");
            }

            if (!string.IsNullOrWhiteSpace(SNISearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pSNI", SNISearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_SNI = :pSNI");
            }

            if (!string.IsNullOrWhiteSpace(BTMSearch?.ToString()))
            {
                parameters.Add(new CommandParameter("pBTM", BTMSearch.Value == 0 ? "F" : "T"));
                whereClause.Append(" AND subSelect.C_BTM = :pBTM");
            }

            return whereClause;
        }

    }
}