<?php

use Illuminate\Database\Seeder;
use App\Laravue\Models\Role;
use App\Laravue\Models\Permission;
use App\Laravue\Acl;

class UpdateRole extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        foreach (Acl::roles() as $role) {
            $checkExistRole = Role::where('name', $role)->count();
            if ($checkExistRole <= 0) {
                Role::findOrCreate($role);
                print "Created New Role: " . $role . "\r\n";
            }
        }

        $adminRole = Role::findByName(Acl::ROLE_ADMIN);
        $managerRole = Role::findByName(Acl::ROLE_MANAGER);
        $editorRole = Role::findByName(Acl::ROLE_EDITOR);

        foreach (Acl::permissions() as $permission) {
            $checkPermission = Permission::where('name', $permission)->count();
            if ($checkPermission <= 0) {
                Permission::findOrCreate($permission, 'api');
                print "Created New Permission: " . $permission . "\r\n";
            }
        }

        // Setup basic permission
        $adminRole->givePermissionTo(Acl::permissions());
        $managerRole->givePermissionTo(Acl::permissions([Acl::PERMISSION_PERMISSION_MANAGE]));
        $editorRole->givePermissionTo(Acl::menuPermissions());
        $editorRole->givePermissionTo(Acl::PERMISSION_ARTICLE_MANAGE);
        $editorRole->givePermissionTo(Acl::PERMISSION_TOPIC_MANAGE);
        $editorRole->givePermissionTo(Acl::PERMISSION_TOPIC_CREATE_MANAGE);
        $editorRole->givePermissionTo(Acl::PERMISSION_TOPIC_EDIT_MANAGE);
        $editorRole->givePermissionTo(Acl::PERMISSION_TOPIC_DELETE_MANAGE);

        $users = \App\Laravue\Models\User::all();
        foreach (Acl::roles() as $role) {
            $role = Role::findByName($role);
            foreach ($users as $user) {
                if ($user->hasRole($role)) $user->syncRoles($role);
            }
        }
    }
}
