<?php

namespace OfficeBrain\Bundle\ServiceGroupBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * ServiceRuleInnerConditionRepository.
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ServiceRuleInnerConditionRepository extends EntityRepository
{
    protected $projectSetting;
    protected $instanceId;
    protected $instanceType;
    protected $cultureId;
    protected $cultureCode;
    protected $userId;

    public function setProjectSetting($projetSetting)
    {
        $this->projectSetting = $projetSetting;
        $this->prepareProjectSettingData();

        return $this;
    }

    public function getProjectSetting()
    {
        return $this->projetSetting;
    }

    public function prepareProjectSettingData()
    {
        $this->instanceId = $this->projectSetting['instance_id'];
        $this->instanceType = $this->projectSetting['instance_type'];
        $this->userId = $this->projectSetting['user_id'];
        $this->cultureId = $this->projectSetting['culture_id'];
        $this->cultureCode = $this->projectSetting['culture_code'];
    }

    /**
     * To add Rule Inner Condition.
     *
     * @param object $ServiceRuleInnerConditionObj
     *
     * @return \OfficeBrain\Bundle\ServiceGroupBundle\Entity\ServiceRuleInnerCondition
     */
    public function addServiceRuleInnerCondition($mainConditionObj, $conditionField, $conditionOperator, $conditionVal, $displayOrder = 0)
    {
        $serviceRuleInnerCond = new ServiceRuleInnerCondition();
        $em = $this->getEntityManager();

        $serviceRuleInnerCond->setServiceRuleMainConditionId($mainConditionObj);
        $serviceRuleInnerCond->setConditionField($conditionField);
        $serviceRuleInnerCond->setConditionOperator($conditionOperator);
        $serviceRuleInnerCond->setConditionValue($conditionVal);
        $serviceRuleInnerCond->setDisplayOrder($displayOrder);

        $em->persist($serviceRuleInnerCond);
        $em->flush();

        return $serviceRuleInnerCond;
    }

    /**
     * To get RuleInnerCondition by MainConditionId.
     *
     * @param unknown $RuleMainConitionId
     *
     * @return ServiceRuleInnerConditionObj|null
     */
    public function getServiceRuleInnerConditionByRuleMainConditionId($RuleMainConitionId)
    {
        $serviceRuleInnerCond = $this->createQueryBuilder('ric')
        ->select('ric.id,ric.conditionField,ric.conditionOperator,ric.conditionValue,ric.conditionValue,ric.displayOrder')
        ->where('ric.serviceRuleMainConditionId  = :ruleMainConditionId')->setParameter('ruleMainConditionId', $RuleMainConitionId)
        ->getQuery()->getResult();

        if ($serviceRuleInnerCond) {
            return $serviceRuleInnerCond;
        }

        return;
    }

    /**
     * To delete RuleInnerCondition.
     *
     * @param unknown $RuleMainCondID
     *
     * @return bool
     */
    public function deleteServiceRuleInnerCondition($RuleMainCondID)
    {
        $isDeleted = $this->createQueryBuilder('ric')
        ->delete()
        ->where('ric.serviceRuleMainConditionId  = :ruleMainConditionId')->setParameter('ruleMainConditionId', $RuleMainCondID)
        ->getQuery()->execute();

        return $RuleMainCondID;
    }
}
