<?php

namespace OfficeBrain\Bundle\ServiceGroupBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * ServiceGroupLanguageRepository.
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ServiceGroupLanguageRepository 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'];
    }

    public function getCountServiceGroupExist($groupName, $languageId = '', $countryId = '')
    {
        $em = $this->getEntityManager();
        $query = $em->getRepository('OfficeBrainServiceGroupBundle:ServiceGroupLanguage')->createQueryBuilder('sgl');
        $query->select('COUNT(sgl)');
        $query->leftjoin('OfficeBrainServiceGroupBundle:ServiceGroup', 'sg', 'WITH', 'sgl.serviceGroup = sg.id');
        $query->where('sgl.groupName = :groupName');
        $query->setParameter('groupName', $groupName);
        if ($languageId) {
            $query->andWhere('sgl.languageId = :languageId');
            $query->setParameter('languageId', $languageId);
        }
        if ($countryId) {
            $query->andWhere('sg.countryId = :countryId');
            $query->setParameter('countryId', $countryId);
        }
        $query->andWhere('sg.deletedAt IS NULL');

        $result = $query->getQuery()->getResult();

        if ($result[0][1] > 0) {
            return $result[0][1];
        }

        return;
    }

    /**
     * To add.
     *
     * @param object $serviceGroupFormObj
     *
     * @return \OfficeBrain\Bundle\ServiceGroupBundle\Entity\ServiceGroup
     */
    public function addServiceGroupLanguage($serviceGroup, $groupName, $languageId)
    {
        $em = $this->getEntityManager();

        $serviceGroupLanguage = $em->getRepository('OfficeBrainServiceGroupBundle:ServiceGroupLanguage')->findOneBy(array('languageId' => $languageId, 'serviceGroup' => $serviceGroup));
        if ($serviceGroupLanguage) {
            $serviceGroupLanguage->setGroupName($groupName);

            return $serviceGroupLanguage;
        }

        $serviceGroupLanguage = new ServiceGroupLanguage();
        $serviceGroupLanguage->setGroupName($groupName);
        $serviceGroupLanguage->setLanguageId($languageId);
        $serviceGroupLanguage->setServiceGroup($serviceGroup);

        $em->persist($serviceGroupLanguage);

        return $serviceGroupLanguage;
    }

    public function commit()
    {
        $em = $this->getEntityManager();
        $em->flush();
    }

    public function clear()
    {
        $em = $this->getEntityManager();
        $em->clear();
    }

    public function set($serviceGroupLanguage)
    {
        $this->_em->persist($serviceGroupLanguage);
        $this->_em->flush();
    
        return $serviceGroupLanguage;
    }
}
