<?php
/**
 * SPDX-FileCopyrightText: 2024 Sascha Nitsch (grumpydeveloper) https://contentnation.net/@grumpydevelop
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 * @author Sascha Nitsch (grumpydeveloper)
 **/

namespace Federator\DIO;

/**
 * IO functions related to users
 */
class User
{
    /**
     * extend the given user with internal data
     * @param \mysqli $dbh database  handle @unused-param
     * @param \Federator\Data\User $user user to extend @unused-param
     */
    protected static function extendUser(\mysqli $dbh, \Federator\Data\User $user) : void
    {
        // do nothing for now
        // TODO: if a new user, create own database entry with additionally needed info
    }

    /**
     * get User by session id
     *
     * @param \mysqli $dbh
     *          database handle
     * @param string $_session
     *          session
     * @param string $_user
     *          user/profile name
     * @param \Federator\Connector\Connector $connector
     *          connector to fetch use with
     * @param \Federator\Cache\Cache|null $cache
     *          optional caching service
     * @return \Federator\Data\User|false
     */
    public static function getUserBySession($dbh, $_session, $_user, $connector, $cache)
    {
        $saveToCache = false;
        $user = false;
        if ($cache !== null) {
            $user = $cache->getRemoteUserBySession($_session, $_user);
        }

        if ($user === false) {
            // ask connector for user-id
            $user = $connector->getRemoteUserBySession($_session, $_user);
            $saveToCache = true;
        }
        if ($user === false) {
            return false;
        }
        self::extendUser($dbh, $user);
        if ($cache !== null && $saveToCache) {
            $cache->saveRemoteUserBySession($_session, $_user, $user);
        }
        return $user;
    }
}