<?php

namespace App\Service\BackendAdmin;

use Doctrine\ORM\EntityManagerInterface;

use App\Repository\LigneRepository;
use App\Repository\AnnonceRepository;
use App\Repository\AffichageRepository;
use App\Repository\PositionRepository;

use App\Entity\Affichage;

class ServiceAnnonce
{   
    
    /**
     * @var LigneRepository $ligneRepository
     */
    private $ligneRepository;

    /**
     * @var AnnonceRepository $annonceRepository
     */
    private $annonceRepository;

    /**
     * @var AffichageRepository $affichageRepository
     */
    private $affichageRepository;

    /**
     * @var PositionRepository $positionRepository
     */
    private $positionRepository;

    /**
     * @var EntityManagerInterface $em
     */
    private $em;

    /**
     * @param PositionRepository $positionRepository
     * @param AnnonceRepository $annonceRepository
     * @param  AffichageRepository $affichageRepository
     * @param EntityManagerInterface $em
     * @return $this
     */
    public function __construct(
        PositionRepository $positionRepository,
        AnnonceRepository $annonceRepository,
        LigneRepository $ligneRepository,
        AffichageRepository $affichageRepository,
        EntityManagerInterface $em
    ){
        $this->positionRepository = $positionRepository;
        $this->annonceRepository = $annonceRepository;
        $this->ligneRepository = $ligneRepository;
        $this->affichageRepository = $affichageRepository;
        $this->em = $em;
    }

    public function getDisponiblePosition($annonce, $id_ligne, $date, $affichages)
    {
        $totalLargeur = $annonce->getLargeur();
        foreach($affichages as $affichage){
            if($date == $affichage->getDateShow()){
                if($id_ligne == $affichage->getLigne()){
                    $totalLargeur += $affichage->getLargeur();
                }
            }
        }
        
        if($id_ligne > 10){
            return null;
        }elseif($totalLargeur > 4){
            return $this->getDisponiblePosition($annonce, ++$id_ligne, $date, $affichages);
        }else{
            return $id_ligne;
        } 
    }


    public function getAnnoncePosition($annonce, $date_debut, $date_fin, $id_ligne)
    {
        $arrAffichage = [];

        $interval = new \DateInterval('P1D');
        $realEnd = new \DateTime($date_fin);
        $realEnd->add($interval);
        $period = new \DatePeriod(new \DateTime($date_debut), $interval, $realEnd);
        
        $lignes = $this->ligneRepository->findAllKeyId();
        
        $affichages = $this->affichageRepository->findBetweenDate($date_debut, $date_fin);
        
        foreach($period as $date) {
            
            $ligneTrouver = $this->getDisponiblePosition($annonce, $id_ligne, $date, $affichages);
            
            if($ligneTrouver){
                $ligne = $lignes[$ligneTrouver];
                $prix = $ligne->getPrixByBimension($annonce->getLargeur());
                $arrAffichage[] = ['date'=>$date, 'ligne'=>$ligne, 'prix'=>$prix, 'dispo'=>true];
            }else{
                $arrAffichage[] = ['date'=>$date, 'ligne'=>null, 'prix'=>0, 'dispo'=>false];
            }

        }
        
        return $arrAffichage;

    }
    


}
?>
