<?php

namespace brain\data;

use ReallySimpleJWT\Token;

use function _\find;

class Auth
{
    public function __construct()
    {
    }

    public static function sessionStatus()
    {
        if (isset($_SESSION['member'])) {
            return true;
        } else {
            return false;
        }
        //return $this->secret;
    }

    public static function status()
    {
        $result = '';
        if (Session::active()) {
            $result = true;
        } else {
            $result = false;
        }
        return $result;
    }

    public static function login($who)
    {
        //grab member list
        $folks = (new Settings())->getFolks();
        $found = find($folks, ['handle' => $who['handle']]);

        if ($found) {
            //name is found, verify password
            if (password_verify($who['password'], $found['password'])) {
                $member = [
                    'handle' => $found['handle'],
                    'email'  => $found['email'],
                    'role'   => $found['role'],
                    'avatar' => $found['avi'],
                    'key'    => $found['key'],
                ];

                $token = Token::create(
                    $found['key'],
                    $found['secret'],
                    time() + 3600,
                    'localhost'
                ); //expires in an hour

                $form_token = md5(uniqid(microtime(), true));
                Session::start();
                Session::set('member', $member);
                Session::set('token', $token);
                Session::set('form_token', $form_token);

                $result = 'good_login';
            } else {
                $result = 'bad_pass';
            }
        } else {
            //if name is not found
            $result = 'no_name';
        }
        return $result;
    }

    public static function findSecret($data)
    {
        $result = [];
        $folks  = (new Settings())->getFolks();

        if (!empty($data['email']) && filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
            $found = find($folks, ['email' => $data['email']]);
            if ($found) {
                //if email is cool, check mail relay status
                //if set up, send secret there, if not just return it
                $config   = new Settings();
                $settings = $config->getSettings();
                $email    = $settings['email']['active'];
                if ($email != 'option-none') {
                    $data['mail_task'] = 'SEND_SECRET';
                    $data['secret']    = $found['secret'];
                    $result            = Mailer::sendmail($data);
                } else {
                    $result = [
                        'message' => 'Valid email, but no email set up!',
                        'type'    => 'secretFound',
                        'secret'  => $found['secret'],
                    ];
                }
            } else {
                $result = [
                    'message' => 'No valid email, no goodies, pleighboi',
                    'type'    => 'secretNotFound',
                ];
            }
        } else {
            $result = [
                'message' => 'Aye, this address is not right, slick.',
                'type'    => 'secretNotFound',
            ];
        }

        return $result;
    }

    public static function makeNewPassword($data)
    {
        //check if passwordsmatch
        if ($data['newPass'] == $data['newPassConfirm']) {
            //verify secret
            $folks = (new Settings())->getFolks();
            $found = find($folks, ['secret' => $data['secret']]);
            if ($found) {
                //create new pass and secret key, then update file
                $hash        = password_hash($data['newPass'], PASSWORD_DEFAULT);
                $freshSecret = StringTools::randomString(12);
                Member::updateData('password', $hash, $data['secret']);
                Member::updateData('secret', $freshSecret, $data['secret']);
                $result = [
                    'message' => 'Password Updated. Very nice!',
                    'type'    => 'passCreated',
                ];
            } else {
                $result = [
                    'message' => 'Secret key is invalid. Try to retrieve it again',
                    'type'    => 'passNotCreated',
                ];
            }
        } else {
            $result = [
                'message' => "Passwords don't match. Try it again.",
                'type'    => 'passNotCreated',
            ];
        }

        return $result;
    }

    public static function logout()
    {
        Session::kill();
    }
}