<?php

namespace App\PackagesAdmin\Manager\Services;

use App\PackagesAdmin\Manager\Models\Manager;
use App\PackagesAdmin\Manager\Models\ManagerPermission;
use App\PackagesAdmin\Manager\Models\ManagerRole;
use App\PackagesAdmin\Manager\Requests\ManagerRoleRequest;

/**
 * Class ManagerRoleService
 * @package App\PackagesAdmin\Manager\Services
 */
class ManagerRoleService {

    /**
     * @param ManagerRole $role
     * @param ManagerRoleRequest $roleRequest
     *
     * @return ManagerRole
     */
    public static function populateData(ManagerRole $role, ManagerRoleRequest $roleRequest)
    {
        $role->title = $roleRequest->title;

        $role->permissions()->delete();

        if ( $roleRequest->has('permission') ) {
            foreach ($roleRequest->input('permission') as $key => $value) {
                $permission = new ManagerPermission();
                $permission->value = $key;
                $role->permissions()->save($permission);
            }
        }

        if ( $roleRequest->has('capsules') && $roleRequest->capsules != 'off') {
            $permission = new ManagerPermission();
            $permission->value = 'capsules.'.$roleRequest->capsules;
            $role->permissions()->save($permission);
        }

        if ( $roleRequest->has('users') && $roleRequest->users != 'off' ) {
            $permission = new ManagerPermission();
            $permission->value = 'users.'.$roleRequest->users;
            $role->permissions()->save($permission);
        }

        return $role;
    }

    /**
     * @param ManagerRoleRequest $roleRequest
     *
     * @return ManagerRole
     */
    public static function createRole(ManagerRoleRequest $roleRequest)
    {
        $role = new ManagerRole();

        $role = self::populateData($role, $roleRequest);

        $role->save();

        return $role;
    }

    /**
     * @param ManagerRoleRequest $roleRequest
     * @param $role_id
     *
     * @return ManagerRole
     */
    public static function updateRole(ManagerRoleRequest $roleRequest, $role_id)
    {
        /** @var ManagerRole $role */
        $role = ManagerRole::query()->find($role_id);

        $role = self::populateData($role, $roleRequest);

        $role->save();

        return $role;
    }

    /**
     * @param $role_id
     *
     * @return bool
     *
     * @throws \Exception
     */
    public static function destroyRole($role_id)
    {
        /** @var ManagerRole $role */
        $role = ManagerRole::query()->find($role_id);

        $role->delete();

        return true;
    }

}
