<?php
namespace App\Service;
use App\Entity\Adresse;
use App\Entity\AdresseComplement;
use App\Entity\CategoriePro;
use App\Entity\Client;
use App\Entity\ClientAdresse;
use App\Entity\ClientEmail;
use App\Entity\ClientSite;
use App\Entity\ContratPlage;
use App\Entity\ContratRegroupement;
use App\Entity\ContratTarif;
use App\Entity\ContratType;
use App\Entity\Equipement;
use App\Entity\EquipementFamille;
use App\Entity\EquipementPuissance;
use App\Entity\EquipementType;
use App\Entity\EquipementTypePuissance;
use App\Entity\EtatCivil;
use App\Entity\Option;
use App\Entity\OptionTarif;
use App\Entity\Produit;
use App\Entity\ProduitPrestationTarif;
use App\Entity\ProduitTarif;
use App\Entity\ProduitType;
use App\Entity\SecteurTarif;
use App\Entity\SecteurZone;
use App\Entity\Site;
use App\Entity\TypeClient;
use App\Entity\TypeComplementAdresse;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use App\Utils\Functions as func;
/**
 * Created by PhpStorm.
 * User: m.dauphin
 * Date: 28/02/2022
 * Time: 17:50
 */

class ClientManager
{

    private $em;

    public function __construct(EntityManagerInterface $em) {
        $this->em = $em;
    }

    public function createClient($datas) {
        $client = new Client();
        $numero_client = $this->em->getRepository(Client::class)->getNouveauNumeroClient() + 1;
        $client->setNumeroClient(date('ym') . str_pad($numero_client, 5, "0", STR_PAD_LEFT));
        $typeClient = $this->em->getRepository(TypeClient::class)->find($datas['type_client']);
        $client->setTypeClient($typeClient);
        $site = $this->em->getRepository(Site::class)->find((int)$datas['site']);
        $clientSite = new ClientSite();
        $clientSite->setClient($client)->setSite($site);
        $client->addClientSite($clientSite);
        //traitement de l'email
        if (isset($datas['email']) && trim(!empty($datas['email']))) {
            $clientEmail = new ClientEmail();
            $clientEmail->setEmail(trim($datas['email']))->setClient($client);
            $client->addClientEmail($clientEmail);
        }
        if ($typeClient->getId() == TypeClient::ID_TYPE_PRO) {
            if (isset($datas['categorie_pro']) && !empty($datas['categorie_pro'])) {
                $categoriePro = $this->em->getRepository(CategoriePro::class)->find($datas['categorie_pro']);
                $client->setCategoriePro($categoriePro);
            }
            if (isset($datas['client_entreprise']) && !empty($datas['client_entreprise'])) $client->setNomEntreprise($datas['client_entreprise']);
        } else {
            if (isset($datas['client_nom']) && !empty($datas['client_nom'])) $client->setNom($datas['client_nom']);
            if (isset($datas['client_prenom']) && !empty($datas['client_prenom'])) $client->setPrenom($datas['client_prenom']);
            if (isset($datas['etat_civil']) && !empty($datas['etat_civil'])) {
                $etatCivil = $this->em->getRepository(EtatCivil::class)->find($datas['etat_civil']);
                $client->setEtatCivil($etatCivil);
            }
        }

        if (isset($datas['client_adresse']) && !empty($datas['client_adresse'])) {
            $adresse = new Adresse();
            $clientAdresse = new ClientAdresse();
            $adresse->setAdresse($datas['client_adresse']);
            $adresse->setCodePostal($datas['client_code_postal']);
            $adresse->setVille($datas['client_ville']);
            if (isset($datas['client_coordinates']) && !empty($datas['client_coordinates'])) {
                $coordinates = explode(',',$datas['client_coordinates']);
                $adresse->setLatitude($coordinates[1]);
                $adresse->setLongitude($coordinates[0]);
            }
            $clientAdresse->setClient($client);
            $equipement = new Equipement();
            if (isset($datas['meme_adresse_equipement']) && $datas['meme_adresse_equipement'] == "1") {
                //on crée  également avec un équipement avec la même adresse + compléments si il y a
                if (isset($datas['complements_adresse']) && !empty($datas['complements_adresse'])) {
                    $complements = json_decode($datas['complements_adresse'],true);
                    if ($complements) {
                        foreach ($complements as $complement) {
                            $typeComplement = $this->em->getRepository(TypeComplementAdresse::class)->find((int)$complement['type_complement_adresse']);
                            $adresseComplement = new AdresseComplement();
                            $adresseComplement->setAdresse($adresse);
                            $adresseComplement->setTypeComplementAdresse($typeComplement);
                            if (isset($complement['commentaire_valeur']))
                                $adresseComplement->setCommentaireValeur($complement['commentaire_valeur']);
                            $adresseComplement->setValeur($complement['valeur']);
                            $this->em->persist($adresseComplement);
                            $adresse->addAdresseComplement($adresseComplement);
                        }
                    }
                }
                $this->em->persist($adresse);
                $equipement->setAdresse($adresse);
            }
            $equipement->setSite($site);
            $equipement->setClientSouscripteur($client);
            $this->em->persist($equipement);
            $clientAdresse->setAdresse($adresse);
            $client->addClientAdress($clientAdresse);
        }

        return $client;

    }

}