<?php

namespace App\Controller;

use App\Container;
use App\Router\Request\IRequest;
use App\Router\Response\Response;
use Shared\Attributes\Route;
use Twig\Environment;
use Data\Core\Preferences;
use Shared\Log;

// TODO : Remove this BaseClass
class Controller extends BaseController
{
    private Environment $twig;
    protected Preferences $preference;

    public function __construct()
    {
       session_start();
       $this->preference = new Preferences();
    }
    
    #[Route(path: '/', name: 'home', methods: ['GET'])]
    public function index(): Response
    {
        return $this->render('./page/index.html',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/analyses', name: 'analyses', methods: ['GET'])]
    public function analyses(): Response
    {
        return $this->render('./page/analyze.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/activity', name: 'activity', methods: ['GET'])]
    public function activity(): Response
    {
        return $this->render('./page/activity.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }


    #[Route(path: '/exercices', name: 'exercices', methods: ['POST'])] // 8
    public function exercices(String $type, String $intensite, String $date, IRequest $req): Response
    {
        $exercicesArray = [
            [
                'date' => $date,
                'type' => $type,
                'intensite' => $intensite,
                'status' => 'A venur',
            ]
        ];
        return $this->render('./page/exercice.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => $exercicesArray,
            'member' => []
        ]);
    }

    #[Route(path: '/search-user', name: 'search-user', methods: ['GET'])]
    public function searchUser(string $username, IRequest $req): Response
    {
        $taberror = [];
        // FILTER 
        $utiliArray = [
            [
                'nom' => 'John',
                'prenom' => 'Doe',
                'img' => 'john_doe',
                'username' => 'johndoe',
            ],
            [
                'nom' => 'Alice',
                'prenom' => 'Smith',
                'img' => 'alice_smith',
                'username' => 'alicesmith',
            ],
        ];
        // if(!Validation::val_string($name)){
        try {
                //code...
                //     $model->userMgr->addFriend($name);
                return $this->render('./page/addfriend.html.twig',[
                    'css' => $this->preference->getCookie(),
                    'pp' => "test2",
                    'user' => "Doe",
                    'role' => "Athlète",
                    'friendship' => [],
                    'analyzes' => [],
                    'mails' => [],
                    'users' => $utiliArray,
                    'infoUser' => [],
                    'exos' => [],
                    'member' => [],
                    'responce' => "Notification d'ajout envoyée à $username"
                ]);
            } catch (\Throwable $th) {
                //throw $th;
                // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
            }
        // }
        
    }

    #[Route(path: '/search-member', name: 'search-member', methods: ['GET'])]
    public function searchMember(string $username, IRequest $req): Response
    {
        $taberror = [];
        // FILTER 
        $utiliArray = [
            [
                'nom' => 'John',
                'prenom' => 'Doe',
                'img' => 'john_doe',
                'username' => 'johndoe',
            ],
            [
                'nom' => 'Alice',
                'prenom' => 'Smith',
                'img' => 'alice_smith',
                'username' => 'alicesmith',
            ],
        ];
        // if(!Validation::val_string($name)){
        try {
                //code...
                //     $model->userMgr->addFriend($name);
                return $this->render('./page/addmember.html.twig',[
                    'css' => $this->preference->getCookie(),
                    'pp' => "test2",
                    'user' => "Doe",
                    'role' => "Athlète",
                    'friendship' => [],
                    'analyzes' => [],
                    'mails' => [],
                    'users' => $utiliArray,
                    'infoUser' => [],
                    'exos' => [],
                    'member' => [],
                    'responce' => "Notification d'ajout envoyée à $username"
                ]);
            } catch (\Throwable $th) {
                //throw $th;
                // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
            }
        // }
        
    }

    #[Route(path: '/add-member', name: 'add-member', methods: ['POST'])]
    public function addmember(string $username, IRequest $req): Response
    {
        $taberror = [];
        $utiliArray = [
            [
                'nom' => 'John',
                'prenom' => 'Doe',
                'img' => 'john_doe',
                'username' => 'johndoe',
            ],
            [
                'nom' => 'Alice',
                'prenom' => 'Smith',
                'img' => 'alice_smith',
                'username' => 'alicesmith',
            ],
        ];
        // if(!Validation::val_string($name)){
        try {
                //code...
                //     $model->userMgr->addFriend($name);
                return $this->render('./page/addmember.html.twig',[
                    'css' => $this->preference->getCookie(),
                    'pp' => "test2",
                    'user' => "Doe",
                    'role' => "Athlète",
                    'friendship' => [],
                    'analyzes' => [],
                    'mails' => [],
                    'users' => $utiliArray,
                    'infoUser' => [],
                    'exos' => [],
                    'member' => [],
                    'responce' => "Notification d'ajout envoyée à $username"
                ]);
            } catch (\Throwable $th) {
                //throw $th;
                // return $this->render("addfriend.html.twig", ['tabError' => $taberror ]);
            }
        // }
        
    }

    #[Route(path: '/member', name: 'member', methods: ['GET'])]
    public function member(): Response
    {
        $utiliArray = [
            [
                'nom' => 'John',
                'prenom' => 'Doe',
                'img' => 'john_doe',
                'username' => 'johndoe',
            ],
            [
                'nom' => 'Alice',
                'prenom' => 'Smith',
                'img' => 'alice_smith',
                'username' => 'alicesmith',
            ],
        ];
        return $this->render('./page/addmember.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => $utiliArray,
            'infoUser' => [],
            'exos' => [],
            'member' => [],
        ]);
    }


    #[Route(path: '/friendlist', name: 'friendlist', methods: ['POST'])]
    public function friendlist(string $username, IRequest $req): Response
    {
        $utiliArray = [
            [
                'nom' => 'John',
                'prenom' => 'Doe',
                'img' => 'john_doe',
                'username' => 'johndoe',
            ],
            [
                'nom' => 'Alice',
                'prenom' => 'Smith',
                'img' => 'alice_smith',
                'username' => 'alicesmith',
            ],
        ];
        /* TODO */

        // -> Enlever ou bloquer un utilisateur en fonction de son username

        return $this->render('./page/friend.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => $utiliArray,
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => [],
        ]);
    }

    #[Route(path: '/friendlist', name: 'friendlist2', methods: ['GET'])]
    public function friendlist2(): Response
    {
        $utiliArray = [
            [
                'nom' => 'John',
                'prenom' => 'Doe',
                'img' => 'test',
                'status' => 'johndoe',
                'username' => 'jdoe',
            ],
            [
                'nom' => 'Alice',
                'prenom' => 'Smith',
                'img' => 'test2',
                'status' => 'alicesmith',
                'username' => 'asmith',
            ],
        ];
        return $this->render('./page/friend.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => $utiliArray,
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => [],
        ]);
    }

    #[Route(path: '/coaching', name: 'coaching', methods: ['GET'])]
    public function coaching(): Response
    {
        return $this->render('./page/coaching.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/mail', name: 'mail', methods: ['GET'])]
    public function mail(): Response
    {
        return $this->render('./page/mail.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/import', name: 'import', methods: ['GET'])]
    public function import(): Response
    {
        return $this->render('./page/import.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }


    #[Route(path: '/profile', name: 'profile', methods: ['GET'])]
    public function profile(): Response
    {
        return $this->render('./page/profile.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }


    #[Route(path: '/psettings', name: 'psettings', methods: ['POST'])]
    public function psettings(string $nom,string $prenom,string $dateNaissance,string $mail,string $tel, IRequest $req): Response
    {
        
       
        return $this->render('./page/settings.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => $prenom,
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }


    #[Route(path: '/login', name: 'login', methods: ['POST'])]
    public function login(string $username,string $mdp, IRequest $req): Response
    {
        
       // CONFIRMER LES DONNESS !!!!! IMPORTANT

        return $this->render('./page/home.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/log', name: 'log', methods: ['GET'])]
    public function login2(): Response
    {
        
       // CONFIRMER LES DONNESS !!!!! IMPORTANT

        return $this->render('./page/login.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/register', name: 'register', methods: ['POST'])]
    public function register(string $username,string $mdp,string $confirmMdp,string $nom,string $prenom,string $dateNaissance,string $sexe,string $taille,string $poids, IRequest $req): Response
    {
        
       // CONFIRMER LES DONNESS !!!!! IMPORTANT

        return $this->render('./page/home.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/regist', name: 'regist', methods: ['GET'])]
    public function register2(): Response
    {
        
       // CONFIRMER LES DONNESS !!!!! IMPORTANT

        return $this->render('./page/register.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/pass', name: 'pass', methods: ['GET'])]
    public function pass(): Response
    {
        
       // CONFIRMER LES DONNESS !!!!! IMPORTANT

        return $this->render('./page/password.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }

    #[Route(path: '/password', name: 'password', methods: ['POST'])]
    public function password(string $email, IRequest $req): Response
    {
        
       // CONFIRMER LES DONNESS !!!!! IMPORTANT

        return $this->render('./page/login.html.twig',[
            'css' => $this->preference->getCookie(),
            'pp' => "test2",
            'user' => "Doe",
            'role' => "Athlète",
            'friendship' => [],
            'analyzes' => [],
            'mails' => [],
            'users' => [],
            'infoUser' => [],
            'exos' => [],
            'member' => []
        ]);
    }
}