<?php

namespace Luticate\Auth\Controller;

use Luticate\Utils\LuController;
use Luticate\Auth\Business\LuticateGroupsBusiness;
use Luticate\Auth\DBO\LuticateGroupsDbo;

class LuticateGroupsController extends LuController {
    protected function getBusiness()
    {
        return new LuticateGroupsBusiness();
    }

    /**
     * Get a group by its id
     * @param $group_id int The group id
     * @return \Luticate\Utils\LuDbo
     */
    public function getById($group_id)
    {
        return LuticateGroupsBusiness::getById($group_id);
    }

    /**
     * Get all groups
     * @param int $page The page number, 0 based
     * @param int $perPage The number of items per page
     * @param string $query The filter query
     * @return \Luticate\Utils\LuMultipleDbo
     */
    public function getAll($page = 0, $perPage = PHP_INT_MAX, $query = "")
    {
        return LuticateGroupsBusiness::getAll($page, $perPage, $query);
    }

    /**
     * Get all users in group
     * @param $group_id int The group id
     * @param int $page The page number, 0 based
     * @param int $perPage The number of items per page
     * @return \Luticate\Utils\LuMultipleDbo
     */
    public function getUsers($group_id, $page = 0, $perPage = PHP_INT_MAX)
    {
        return LuticateGroupsBusiness::getUsers($group_id, $page, $perPage);
    }

    /**
     * Add a new group
     * @param $group_name string The group name
     * @return int
     */
    public function add($group_name)
    {
        return LuticateGroupsBusiness::add($group_name);
    }

    /**
     * Delete a group by its id
     * @param $group_id int The group id
     * @return bool
     */
    public function del($group_id)
    {
        return LuticateGroupsBusiness::deleteById($group_id);
    }

    /**
     * Edit a group name by its id
     * @param $group_id int The group id
     * @param $group_name string The new group name
     * @return bool
     */
    public function edit($group_id, $group_name)
    {
        return LuticateGroupsBusiness::edit($group_id, $group_name);
    }

    /**
     * Add a user to a group
     * @param $user_id int The user id
     * @param $group_id int The group id
     * @return bool
     */
    public function addUser($user_id, $group_id)
    {
        return LuticateGroupsBusiness::addUser($user_id, $group_id);
    }

    /**
     * Delete a user from a group
     * @param $user_id int The user id
     * @param $group_id int The group id
     * @return bool
     */
    public static function delUser($user_id, $group_id)
    {
        return LuticateGroupsBusiness::delUser($user_id, $group_id);
    }
}