<?php

namespace Modules\Ajax\Controller;

use Entity\Model\Paravrac;
use Skeleton\Controller\Controller;
use GuzzleHttp\Psr7\Response;
use Helpers\Trad\Trad;

class MailController extends Controller
{
    public function emailUtilisateurAction() : string
    {
        $post = $this->request->getParsedBody();
        $utilisateur = new \Entity\Model\Hastutil($this->pdo);
        $utilisateur = $utilisateur->find($post['value']);
        
        return $utilisateur['EMAIL'];
    }
    
    public function emailContactFournisseurAction() : string
    {
        $post = $this->request->getParsedBody();
        // $params = [
        //     'CODE_FOU' => $post['value']
        // ];
        $utilisateur = new \Entity\Model\Contfour($this->pdo);
        $utilisateur = $utilisateur->find($post);
        
        return $utilisateur['EMAIL'];
    }
    
    public static function envoiMail($params) :\SimpleXMLElement
    {
        $xmlResult = new \Modules\Ajax\WebService\EnvoiMail();
        return $xmlResult->envoiMail($params);
    }
    
    public function validationMailAction()
    {
        $post = $this->request->getParsedBody();
        $file = $this->request->getUploadedFiles();
        $trad = $this->getTranslationService();
        
        
        // Verification formulaire
        $validator = $this->createValidator();
        $validator->isStringWithContent($trad->t('Destinataires'), $post['destinataires'], true, ['.', '@', '_', '-'], '', ['.', '@'], 1, 255, true);
        $validator->isStringWithContent($trad->t('Copie à'), $post['copie'], true, ['.', '@', '_', '-'], '', ['.', '@'], 0, 255, true);
        $validator->isStringWithContent($trad->t('Copie cachée à'), $post['copie_cachee'], true, ['.', '@', '_', '-'], '', ['.', '@'], 0, 255, true);
        $validator->size($post['sujet'], $trad->t('Sujet'), 1, 255);
        $validator->size($post['message'], $trad->t('Message'), 1, 3000);
        $erreur = $validator->getError();

        
        if ($erreur=='') {
            $file = $this->request->getUploadedFiles();
            $post['pj'] = array();
            $post['listePJ'] = '';
            $nbPj = 1;


            $extensionsAutorise = [];
            $listeExtentionAutorises = (new Paravrac($this->pdo))->findAll(['TYPEPARV' =>'PARAMPJ']);
            foreach ($listeExtentionAutorises as $liste) {
                $extensionsAutorise = array_merge($extensionsAutorise, [$liste['CODEPARV']]);
            }
            // spec 4041 gestion des extensions autorisés
            // $extensionsAutorise=array('png', 'jpg', 'jpeg', 'bmp', 'gif', 'html', 'htm', 'css', 'ico', 'tiff', 'pdf', 'tif'
            // ,'xls', 'xlsx', 'doc', 'docx', 'txt', 'log', 'ppt', 'pptx', 'odt', 'zip', '7z');

        
            

            // Pièces jointes automatiques
            foreach ($post as $key => $value) {
                $tblKey = explode('_', $key);
                if ($tblKey[0]=='pjdefaut') {
                    $post['pj'][$nbPj++] = $value;
                    $post['listePJ'] = $post['pjdefautNomFichier_'.$tblKey[1]].', ';
                }
            }
            // Pièces jointes ajoutés par l'utilisateur
            foreach ($file as $key => $value) {
                if (substr($key, 0, 13)=='piece_jointe_' && $value->getClientFilename()!='') {
                    $extention = explode('.', $value->getClientFilename());
                    $extension = strtoupper(end($extention));
                    if (!in_array($extension, $extensionsAutorise)) {
                        return new Response(200, [
            
                        ], (string) \json_encode([
                            'statut' => 'E',
                            'erreur' => Trad::strBuild(
                                $trad->t("Le fichier @1@ n'est pas valide, les formats attendus sont les suivants : @2@"),
                                $value->getClientFilename(),
                                implode(', ', $extensionsAutorise)
                            )
                        ]));
                    }

                    $value = date('Ymd')."_".date('His')."_".$value->getClientFilename();
                    $pj = $_SESSION['dir_tmp'].$value;
                    $file[$key]->moveTo($pj);
                    $post['pj'][$nbPj++] = $_SESSION['dir_tmp'].$value;
                    $post['listePJ'] = $value.', ';
                }
            }
            
            $envoiMail = \Modules\Ajax\Controller\MailController::envoiMail($post);

            if ($envoiMail->Retour=="O") {
                if ($post['module']=='facture') {
                    \Modules\Facture\Controller\AjaxFactureController::mailEvenementFactureAction($post);
                }

               
                $text = $trad->t("Votre mail a bien été envoyé à"). ' '.  $post['destinataires'];
                $params = [
                    'statut' => 'O',
                    'message' => $text,
                ];
                
                return new Response(200, [], (string) \json_encode($params));
            } else {
                $erreur = $envoiMail->MsgErreur;
            }
        }
        
        return new Response(200, [], (string) \json_encode(['statut' => 'E', 'erreur' => $erreur]));
    }
}
