<?php

namespace OfficeBrain\Bundle\ServiceGroupBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * ServiceRuleMainConditionRepository.
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ServiceRuleMainConditionRepository 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 Main Condition.
     *
     * @param object $ServiceRuleMainConditionObj
     *
     * @return \OfficeBrain\Bundle\ServiceGroupBundle\Entity\ServiceRuleMainCondition
     */
    public function addServiceRuleMainCondition($masterIDObj, $parentIdObj, $mainCondition)
    {
        $serviceRuleMainCond = new ServiceRuleMainCondition();

        $serviceRuleMainCond->setServiceRuleMasterId($masterIDObj);
        $serviceRuleMainCond->setParentId($parentIdObj);
        $serviceRuleMainCond->setMainCondition($mainCondition);

        $serviceRuleMainCond->setCreatedUid($this->userId);
        $serviceRuleMainCond->setCreatedAt(new \DateTime());
        $serviceRuleMainCond->setUpdatedUid($this->userId);
        $serviceRuleMainCond->setUpdatedAt(new \DateTime());

        $this->_em->persist($serviceRuleMainCond);
        $this->_em->flush();

        return $serviceRuleMainCond;
    }
    /**
     * To get RuleMainCondition.
     *
     * @param unknown $RuleMastId
     *
     * @return ServiceRuleMainConditionObj
     */
    public function getServiceRuleMainConditionByRuleMastId($RuleMastId)
    {
        $serviceRuleMainCond = $this->findBy(array('serviceRuleMasterId' => $RuleMastId));
        if ($serviceRuleMainCond) {
            return $serviceRuleMainCond;
        }

        return;
    }

    /**
     * To delete RuleMainCondition.
     *
     * @param unknown $RuleMastId
     *
     * @return ServiceRuleMainConditionObj|null
     */
    public function getServiceRuleMainConditionByRuleMastIdParentId($RuleMastId, $parentId)
    {
        //$serviceRuleMainCond = $this->findBy(array('ruleMasterId'=>$RuleMastId, 'parentId' => $parentId));
        $serviceRuleMainCond = $this->createQueryBuilder('rmc')
        ->select('rmc.id,rmc.mainCondition,rmc.ifConditionIs,rmc.parentId')
        ->where('rmc.serviceRuleMasterId  = :ruleMasterId')->setParameter('ruleMasterId', $RuleMastId)
        ->andWhere('rmc.parentId  = :parentId')->setParameter('parentId', $parentId)
        ->getQuery()->getResult();

        if ($serviceRuleMainCond) {
            return $serviceRuleMainCond;
        }

        return;
    }

    /**
     * To delete RuleMainCondition.
     *
     * @param unknown $Id
     *
     * @return bool
     */
    public function deleteServiceRuleMainCondition($Id)
    {
        $serviceRuleMainCond = $this->findOneBy(array('id' => $Id));
        if ($serviceRuleMainCond) {
            $em = $this->getEntityManager();
            $em->remove($serviceRuleMainCond);
            $em->flush();

            return true;
        }

        return false;
    }
}
