<?php

namespace Modules\Reception\Service;

use Modules\Reception\Repository\CreationBR;
use Modules\Reception\Repository\Incident;
use PDO;

class ModifBRService
{
    private PDO $pdo;
    private CreationBR $repository;
    private Incident $incidentRepository;

    /**
     * __construct
     *
     * @param  PDO $pdo
     */
    public function __construct(PDO $pdo)
    {
        $this->pdo                  = $pdo;
        $this->repository           = new CreationBR($this->pdo);
        $this->incidentRepository   = new Incident($this->pdo);
    }
    
    /**
     * resetOxaBrEnteteModif
     *
     * @param  string $brNumber
     * @return array<mixed>
     */
    public function resetOxaBrEnteteModif(string $brNumber): array
    {
        // on commence par supprimer les éventuelles infos dans oxa_br_entete
        $this->repository->deleteOxaBrEntete($_SESSION['Session_Login']);

        // on supprime les éventuels incidents enregistrés temporairement dans la table oxa_br_ligne
        $this->incidentRepository->deleteIncident();

        // puis on insère les données du BR en cours de modification
        $this->repository->initOxaBrEnteteModif($brNumber);

        // on supprime les CS temporaires
        $this->repository->resetCsBr($_SESSION['Session_Login']);

        // init des CS du BR
        $this->repository->initCsBrModif($brNumber);

        return $this->repository->getInfoBrEntete($_SESSION['Session_Login']);
    }
    
    /**
     * resetOxaBrLigneModif
     *
     * @param  string $brNumber
     * @param  string $init
     * @return array<mixed>
     */
    public function resetOxaBrLigneModif(string $brNumber, string $init = '', string $type = 'R'): array
    {
        // on commence par supprimer les infos oxa_br_ligne
        $this->repository->deleteOxaBrLigne($_SESSION['Session_Login'], $init);

        // on insère les données des lignes du BR en cours de modification
        if ($type == 'R') {
            $this->repository->initOxaBrLigneModif($brNumber);

            // init des CC de lignes
            $this->repository->deleteCcTempBr();
            $this->repository->initCcBrModif();
        } else {
            // on commence par récupérer les données du BR initial
            $this->repository->initOxaBrLigneRetour((int)$brNumber);
            // on met ensuite à jour avec les données du BR qu'on est en train de modifier (pour récupérer les lignes qui n'auraient pas été enregistrées dans le BR en cours de modification)
            $this->repository->updateOxaBrLigneRetourModif();
        }

        return $this->repository->getOxaBrLigne($_SESSION['Session_Login']);
    }
}
