<?php

namespace OfficeBrain\Bundle\CmsBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

//use OfficeBrain\Bundle\CmsBundle\Entity\SitemapRouteMaster as SitemapRouteMaster;

/**
 * @author OfficeBrain 4464 <info@officebrain.com>
 *
 * Description : This is the repository class.
 * *
 * SiteMapRouteRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class SiteMapRouteRepository extends EntityRepository
{
    protected $projectSetting;
    protected $instanceId;
    protected $projectId;
    protected $sitemapRouteMasterRepository;

    /**
     * @author Employee Id: 4464
     *
     * Description : This function is used to set project settings
     *
     * @param 1: $projectSetting
     *
     * @return: NULL
     *
     * @throws Exception: Null
     */
    public function setProjectSetting($projetSetting)
    {
        $this->projectSetting = $projetSetting;
        $this->prepareProjectSettingData();
    }

    /**
     * @author Employee Id: 4464
     *
     * Description : This function is used to get project settings
     *
     * @param : None
     *
     * @return: project setting array
     *
     * @throws Exception: Null
     */
    public function getProjectSetting()
    {
        return $this->projetSetting;
    }

    /**
     * @author Employee Id: 4464
     *
     * Description : This function is used to set member variables default value
     *
     * @param : None
     *
     * @return: NULL
     *
     * @throws Exception: Null
     */
    public function prepareProjectSettingData()
    {
        $this->projectId = $this->projectSetting['project_id'];
        $this->instanceId = $this->projectSetting['instance_id'];
        $this->sitemapRouteMasterRepository = $this->_em->getRepository('OfficeBrainCmsBundle:SitemapRouteMaster');
    }

    /**
     * @author Employee Id: 4464
     *
     * Description : Find single  based on ID
     *
     * @param $id
     *
     * @return : Sitemap routes object
     *
     * @throws Exception: Null
     */
    public function find($id, $lockMode = NULL, $lockVersion = NULL)
    {
        $queryBuilder = $this->createQueryBuilder('sm')
        ->select('sm')
        ->where('sm.id = :id')
        ->setParameter(':id', $id)
        ->getQuery()
        ->getSingleResult();

        if (empty($queryBuilder)) {
            $queryBuilder = null;
        }

        return $queryBuilder;
    }

    /**
     * @author Employee Id: 4464
     *
     * Description : Find record based on route
     *
     * @param $route
     *
     * @return : sitemap routes Object
     *
     * @throws Exception: Null
     */
    public function getRoutesInfo($route)
    {
        $queryBuilder = $this->createQueryBuilder('sm')
        ->select('sm')
        ->where('sm.path = :route')
        ->andWhere('sm.status = 1')
        ->andWhere('sm.instanceId = :instanceId')
        ->setParameter(':route', $route)
        ->setParameter(':instanceId', $this->instanceId)
        ->getQuery()
        ->getResult();

        if (empty($queryBuilder)) {
            $queryBuilder = null;
        }

        return $queryBuilder;
    }

    /**
     * @author Employee Id: 4464
     *
     * Description : Set the public routes into the database
     *
     * @param $instanceId
     *
     * @return : sitemap routes Object
     *
     * @throws Exception: Null
     */
    public function setRoutesInfo($instanceId)
    {
        $this->deleteInstanceRoutes($instanceId);
        $routeMasterInfo = $this->sitemapRouteMasterRepository->getRoutes();
        if (!empty($routeMasterInfo)) {
            foreach ($routeMasterInfo as $key => $routes) {
                $sitemapRoute = new SitemapRoute();
                $sitemapRoute->setTitle($routes->getTitle());
                $sitemapRoute->setPath($routes->getPath());
                $sitemapRoute->setStatus($routes->getStatus());
                $sitemapRoute->setGroupName($routes->getGroupName());
                $sitemapRoute->setgroupTitle($routes->getGroupTitle());
                $sitemapRoute->setInstanceId($instanceId);
                $this->_em->persist($sitemapRoute);
            }
        }
        $this->_em->flush();
    }

    /**
     * @author Employee Id: 4464
     *
     * Description : delete all records for the current instance
     *
     * @param $instanceId
     *
     * @return : sitemap routes Object
     *
     * @throws Exception: Null
     */
    public function deleteInstanceRoutes($instanceId)
    {
        /* $queryBuilder = $this->createQueryBuilder('sm')
        ->select('sm')
        ->where('sm.instanceId = :instanceId')
        ->setParameter(':instanceId', $instanceId)
        ->getQuery()
        ->getResult();

        if (empty($queryBuilder)) {
            //throw new NotFoundHttpException('No recourd were found.');
            $queryBuilder = null;
        }else{
            $this->_em->remove($queryBuilder);
            $this->_em->flush();
        } */

        /* $this->createQueryBuilder('sm')
            ->delete('OfficeBrainCmsBundle:SitemapRoute')
            ->where('sm.instanceId = :instanceId')
            ->setParameter(':instanceId', $instanceId);
        $this->_em->flush(); */

        $q = $this->_em->createQuery('delete from OfficeBrainCmsBundle:SitemapRoute sm where sm.instanceId = '.$instanceId);
        $numDeleted = $q->execute();
    }
}
