<?php

defined('BASEPATH') or exit('No direct script access allowed');

$dir = FCPATH . 'forum';
require $dir . '/src/XF.php';

class Forum_engine extends MY_Controller
{

    private $xf;

    public function __construct()
    {
        parent::__construct();

        if (empty($this->session->logged) && $this->router->fetch_method() != 'auth') {
            $this->session->set_flashdata('show_login_form', true);
            redirect('engine/error?http_code=403');
        } else {
            XF::start($dir);
            $this->xf = XF::setupApp('XF\Pub\App');
        }
    }

    private function _login()
    {
        $ip      = $this->xf->request->getIp();
        $service = $this->xf->service('XF:User\Login', null, $ip);

        $user = $service->getUserFromID($this->session->forum_id);
        $this->xf->session->changeUser($user);
        XF::setVisitor($user);
        $this->xf->repository('XF:SessionActivity')->clearUserActivity(0, $ip);
        $this->xf->repository('XF:Ip')->logIp(
            $user->user_id, $ip,
            'user', $user->user_id, 'login'
        );

        $rememberRepo = $this->xf->repository('XF:UserRemember');
        $key          = $rememberRepo->createRememberRecord($user->user_id);
        $value        = $rememberRepo->getCookieValue($user->user_id, $key);

        $this->load->helper('cookie');

        $cookie = array('name' => 'user', 'value' => $value, 'expire' =>  time() + (365 * 86400), 'prefix' => 'yggxf_');
        $this->input->set_cookie($cookie);
    }

    private function _register()
    {
        $registration = XF::service('XF:User\Registration');
        $data         = array
            (
            'username' => $this->session->nickname,
            'email'    => $this->session->email,
            'password' => bin2hex(random_bytes(10)),
        );

        $registration->setFromInput($data);

        $user = (array) $registration->save();
        $user = array_values($user)[4]['user_id'];
        $this->db->where('id', $this->session->id)->set('forum_id', $user)->update('users');
        $this->session->forum_id = $user;
        $this->_login();
    }

    public function auth()
    {
        $this->load->library('user_agent');
        $redir_path = $this->input->get('redir_path');

        /**if ($redir_path == '') {
            $ref = $this->agent->referrer();

            if (parse_url($ref, PHP_URL_HOST) == parse_url(base_url(), PHP_URL_HOST)) {
                $path          = parse_url($ref, PHP_URL_PATH);
                $path_exploded = explode('/', parse_url($ref, PHP_URL_PATH));
                // On vérifie si le visiteur vient du forum
                if ($path_exploded[2] == 'ww2_forum') {
                    $redirect = true;
                }
            }
        } else {
            $redir_path_exploded = explode('/', $redir_path);

            if ($redir_path_exploded[2] == 'ww2_forum') {
                $path_response = $redir_path;
            }
        }/***/

        if ($this->session->logged) {
            if ($this->session->forum_id == 0) {
                $this->_register();
            } else {
                $this->_login();
            }
            // Redirect forum
           redirect('forum');

        } else {
			// User is no connected
            $this->session->set_flashdata('show_login_form', true);
            redirect('engine/error?http_code=403');
        }

/**        if (isset($path_response)) {
            $base = 'http://yggtorrent.is';
            redirect($base . $path_response);
        } else if ($redirect == true) {
            $path = $path;
            $path .= parse_url($ref, PHP_URL_QUERY);
            //echo $path;
            $this->session->logged ? redirect($ref) : redirect(base_url() . '?action=signin&target=forum&redir_path=' . $path);
        } else {
            redirect('ww2_forum');
        }**/
    }

}

