<?php

namespace Lc\ShopBundle\Repository;

use Doctrine\ORM\QueryBuilder;
use Lc\ShopBundle\Context\DefaultRepositoryInterface;
use Lc\ShopBundle\Context\UserInterface;

/**
 * @method UserInterface|null find($id, $lockMode = null, $lockVersion = null)
 * @method UserInterface|null findOneBy(array $criteria, array $orderBy = null)
 * @method UserInterface[]    findAll()
 * @method UserInterface[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class UserRepository extends BaseRepository implements DefaultRepositoryInterface
{
        public function getInterfaceClass()
        {
                return UserInterface::class;
        }

        public function findByMerchantQuery() :QueryBuilder
        {
                return $this->createQueryBuilder('e')
                        ->innerJoin('e.userMerchants', "userMerchants")
                        ->andWhere('userMerchants.merchant = :currentMerchant')
                        ->setParameter('currentMerchant', $this->merchantUtils->getMerchantCurrent()->getId()) ;
        }

        public function findAllByNewsletter($newsletter)
        {
                return $this->createQueryBuilder('e')
                        ->where(':newsletter MEMBER OF e.newsletters')
                        ->setParameter('newsletter', $newsletter->getId())
                        ->andWhere('e.enabled = 1')
                        ->innerJoin('e.userMerchants', 'um')
                        ->andWhere('um.merchant = :merchant AND um.active = 1')
                        ->setParameter('merchant', $newsletter->getMerchant())
                        ->getQuery()
                        ->getResult();
        }

        public function findByRole($role)
        {
                $qb = $this->createQueryBuilder('u')
                        ->where('u.roles LIKE :roles')
                        ->setParameter('roles', '%"' . $role . '"%');

                return $qb->getQuery()->getResult();
        }

}
