﻿<?php

namespace Database\Seeders;
use App\Models\User;
use App\Models\Utility;
use Illuminate\Support\Facades\Hash;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

        $accountantPermission = [
            ['name' => 'show dashboard'],
            ['name' => 'manage expense'],
            ['name' => 'create expense'],
            ['name' => 'edit expense'],
            ['name' => 'delete expense'],
            ['name' => 'manage invoice'],
            ['name' => 'create invoice'],
            ['name' => 'Delete Invoice'],
            ['name' => 'Show Invoice'],
            ['name' => 'convert invoice'],
            ['name' => 'manage product & service'],
            ['name' => 'create product & service'],
            ['name' => 'delete product & service'],
            ['name' => 'edit product & service'],
            ['name' => 'manage constant tax'],
            ['name' => 'create constant tax'],
            ['name' => 'edit constant tax'],
            ['name' => 'delete constant tax'],
            ['name' => 'manage constant category'],
            ['name' => 'create constant category'],
            ['name' => 'edit constant category'],
            ['name' => 'delete constant category'],
            ['name' => 'manage constant unit'],
            ['name' => 'create constant unit'],
            ['name' => 'edit constant unit'],
            ['name' => 'delete constant unit'],
            ['name' => 'manage customer'],
            ['name' => 'create customer'],
            ['name' => 'Edit Customer'],
            ['name' => 'Delete Customer'],
            ['name' => 'show customer'],
            ['name' => 'manage vender'],
            ['name' => 'create vender'],
            ['name' => 'edit vender'],
            ['name' => 'delete vender'],
            ['name' => 'show vender'],
            ['name' => 'manage bank account'],
            ['name' => 'create bank account'],
            ['name' => 'edit bank account'],
            ['name' => 'delete bank account'],
            ['name' => 'manage transfer'],
            ['name' => 'create transfer'],
            ['name' => 'edit transfer'],
            ['name' => 'delete transfer'],
            ['name' => 'manage revenue'],
            ['name' => 'create revenue'],
            ['name' => 'edit revenue'],
            ['name' => 'delete revenue'],
            ['name' => 'manage bill'],
            ['name' => 'create bill'],
            ['name' => 'edit bill'],
            ['name' => 'delete bill'],
            ['name' => 'show bill'],
            ['name' => 'manage payment'],
            ['name' => 'create payment'],
            ['name' => 'edit payment'],
            ['name' => 'delete payment'],
            ['name' => 'delete invoice product'],
            ['name' => 'delete bill product'],
            ['name' => 'create payment invoice'],
            ['name' => 'delete payment invoice'],
            ['name' => 'send bill'],
            ['name' => 'create payment bill'],
            ['name' => 'delete payment bill'],
            ['name' => 'income report'],
            ['name' => 'expense report'],
            ['name' => 'income vs expense report'],
            ['name' => 'invoice report'],
            ['name' => 'bill report'],
            ['name' => 'stock report'],
            ['name' => 'tax report'],
            ['name' => 'loss & profit report'],
            ['name' => 'manage transaction'],
            ['name' => 'manage credit note'],
            ['name' => 'create credit note'],
            ['name' => 'edit credit note'],
            ['name' => 'delete credit note'],
            ['name' => 'manage debit note'],
            ['name' => 'create debit note'],
            ['name' => 'edit debit note'],
            ['name' => 'delete debit note'],
            ['name' => 'manage proposal'],
            ['name' => 'create proposal'],
            ['name' => 'edit proposal'],
            ['name' => 'delete proposal'],
            ['name' => 'duplicate proposal'],
            ['name' => 'send proposal'],
            ['name' => 'show proposal'],
            ['name' => 'delete proposal product'],
            ['name' => 'manage goal'],
            ['name' => 'create goal'],
            ['name' => 'edit goal'],
            ['name' => 'delete goal'],
            ['name' => 'manage assets'],
            ['name' => 'create assets'],
            ['name' => 'edit assets'],
            ['name' => 'delete assets'],
            ['name' => 'statement report'],
            ['name' => 'manage constant custom field'],
            ['name' => 'create constant custom field'],
            ['name' => 'edit constant custom field'],
            ['name' => 'delete constant custom field'],
            ['name' => 'manage chart of account'],
            ['name' => 'create chart of account'],
            ['name' => 'edit chart of account'],
            ['name' => 'delete chart of account'],
            ['name' => 'manage journal entry'],
            ['name' => 'create journal entry'],
            ['name' => 'edit journal entry'],
            ['name' => 'delete journal entry'],
            ['name' => 'show journal entry'],
            ['name' => 'balance sheet report'],
            ['name' => 'ledger report'],
            ['name' => 'trial balance report'],
            ['name' => 'manage budget planner'],
            ['name' => 'create budget planner'],
            ['name' => 'edit budget planner'],
            ['name' => 'delete budget planner'],
            ['name' => 'view budget planner'],
            ['name' => 'manage retainer'],
            ['name' => 'create retainer'],
            ['name' => 'edit retainer'],
            ['name' => 'delete retainer'],
            ['name' => 'show retainer'],
            ['name' => 'send retainer'],
            ['name' => 'duplicate retainer'],
            ['name' => 'delete retainer product'],
            ['name' => 'convert invoice proposal'],
            ['name' => 'convert invoice retainer'],
            ['name' => 'convert retainer proposal'],
            ['name' => 'manage constant contract type'],
            ['name' => 'create constant contract type'],
            ['name' => 'edit constant contract type'],
            ['name' => 'delete constant contract type'],


        ];
        $companyPermissions = [
            ['name' => 'show dashboard'],
        
            ['name' => 'manage business settings'],
            ['name' => 'manage expense'],
            ['name' => 'create expense'],
            ['name' => 'edit expense'],
            ['name' => 'delete expense'],
            ['name' => 'manage invoice'],
            ['name' => 'create invoice'],
            ['name' => 'Edit Invoice'],
            ['name' => 'Delete Invoice'],
            ['name' => 'Show Invoice'],
            ['name' => 'manage product & service'],
            ['name' => 'create product & service'],
            ['name' => 'delete product & service'],
            ['name' => 'edit product & service'],
            ['name' => 'manage constant tax'],
            ['name' => 'create constant tax'],
            ['name' => 'edit constant tax'],
            ['name' => 'delete constant tax'],
            ['name' => 'manage constant category'],
            ['name' => 'create constant category'],
            ['name' => 'edit constant category'],
            ['name' => 'delete constant category'],
            ['name' => 'manage constant unit'],
            ['name' => 'create constant unit'],
            ['name' => 'edit constant unit'],
            ['name' => 'delete constant unit'],
            ['name' => 'manage customer'],
            ['name' => 'create customer'],
            ['name' => 'Edit Customer'],
            ['name' => 'Delete Customer'],
            ['name' => 'show customer'],
            ['name' => 'manage vender'],
            ['name' => 'create vender'],
            ['name' => 'edit vender'],
            ['name' => 'delete vender'],
            ['name' => 'show vender'],
            ['name' => 'manage bank account'],
            ['name' => 'create bank account'],
            ['name' => 'edit bank account'],
            ['name' => 'delete bank account'],
            ['name' => 'manage transfer'],
            ['name' => 'create transfer'],
            ['name' => 'edit transfer'],
            ['name' => 'delete transfer'],
            ['name' => 'manage revenue'],
            ['name' => 'create revenue'],
            ['name' => 'edit revenue'],
            ['name' => 'delete revenue'],
            ['name' => 'manage bill'],
            ['name' => 'create bill'],
            ['name' => 'edit bill'],
            ['name' => 'delete bill'],
            ['name' => 'show bill'],
            ['name' => 'manage payment'],
            ['name' => 'create payment'],
            ['name' => 'edit payment'],
            ['name' => 'delete payment'],
            ['name' => 'delete bill product'],
            ['name' => 'Send Invoice'],
            ['name' => 'create payment invoice'],
            ['name' => 'delete payment invoice'],
            ['name' => 'send bill'],
            ['name' => 'create payment bill'],
            ['name' => 'delete payment bill'],
            ['name' => 'income report'],
            ['name' => 'expense report'],
            ['name' => 'income vs expense report'],
            ['name' => 'invoice report'],
            ['name' => 'bill report'],
            ['name' => 'stock report'],
            ['name' => 'tax report'],
            ['name' => 'loss & profit report'],
            ['name' => 'manage transaction'],
            ['name' => 'manage order'],
            ['name' => 'manage credit note'],
            ['name' => 'create credit note'],
            ['name' => 'edit credit note'],
            ['name' => 'delete credit note'],
            ['name' => 'manage debit note'],
            ['name' => 'create debit note'],
            ['name' => 'edit debit note'],
            ['name' => 'delete debit note'],
            ['name' => 'duplicate invoice'],
            ['name' => 'convert invoice'],
            ['name' => 'duplicate bill'],
            ['name' => 'manage proposal'],
            ['name' => 'create proposal'],
            ['name' => 'edit proposal'],
            ['name' => 'delete proposal'],
            ['name' => 'duplicate proposal'],
            ['name' => 'show proposal'],
            ['name' => 'send proposal'],
            ['name' => 'delete proposal product'],
            ['name' => 'manage goal'],
            ['name' => 'create goal'],
            ['name' => 'edit goal'],
            ['name' => 'delete goal'],
            ['name' => 'manage assets'],
            ['name' => 'create assets'],
            ['name' => 'edit assets'],
            ['name' => 'delete assets'],
            ['name' => 'statement report'],
            ['name' => 'manage constant custom field'],
            ['name' => 'create constant custom field'],
            ['name' => 'edit constant custom field'],
            ['name' => 'delete constant custom field'],
            ['name' => 'manage chart of account'],
            ['name' => 'create chart of account'],
            ['name' => 'edit chart of account'],
            ['name' => 'delete chart of account'],
            ['name' => 'manage journal entry'],
            ['name' => 'create journal entry'],
            ['name' => 'edit journal entry'],
            ['name' => 'delete journal entry'],
            ['name' => 'show journal entry'],
            ['name' => 'balance sheet report'],
            ['name' => 'ledger report'],
            ['name' => 'trial balance report'],
            ['name' => 'manage budget planner'],
            ['name' => 'create budget planner'],
            ['name' => 'edit budget planner'],
            ['name' => 'delete budget planner'],
            ['name' => 'view budget planner'],
            ['name' => 'manage contract'],
            ['name' => 'create contract'],
            ['name' => 'edit contract'],
            ['name' => 'delete contract'],
            ['name' => 'show contract'],
            ['name' => 'duplicate contract'],
            ['name' => 'delete attachment'],
            ['name' => 'delete comment'],
            ['name' => 'delete notes'],
            ['name' => 'contract description'],
            ['name' => 'upload attachment'],
            ['name' => 'add comment'],
            ['name' => 'add notes'],
            ['name' => 'send contract mail'],
            ['name' => 'manage retainer'],
            ['name' => 'create retainer'],
            ['name' => 'edit retainer'],
            ['name' => 'delete retainer'],
            ['name' => 'show retainer'],
            ['name' => 'send retainer'],
            ['name' => 'duplicate retainer'],
            ['name' => 'delete retainer product'],
            ['name' => 'convert invoice proposal'],
            ['name' => 'convert invoice retainer'],
            ['name' => 'convert retainer proposal'],
            ['name' => 'manage constant contract type'],
            ['name' => 'create constant contract type'],
            ['name' => 'edit constant contract type'],
            ['name' => 'delete constant contract type'],



        ];

        $allPermissions = array_merge($companyPermissions, $accountantPermission);
        $companyRole = Role::find(1);

        foreach ($allPermissions as $permission) {
            // Check if the permission exists for the 'web' guard
            $permissionExists = Permission::where('name', $permission)
                                          ->where('guard_name', 'web') // Ensure the guard is specified
                                          ->exists();
                                          
            if (!$permissionExists) {
                // Create the permission if it doesn't exist
                Permission::create(['name' => $permission, 'guard_name' => 'web']);
            }
        
            // After ensuring the permission exists, assign it to the role
            $companyRole->givePermissionTo($permission);
        }


    }