<?php

use App\Models\Customer;
use App\Models\CustomField;
use App\Models\Estimate;
use App\Models\ExchangeRateProvider;
use App\Models\Expense;
use App\Models\Invoice;
use App\Models\Item;
use App\Models\Note;
use App\Models\Payment;
use App\Models\RecurringInvoice;
use App\Models\TaxType;

return [

    /*
    |--------------------------------------------------------------------------
    | Abilities Configuration
    |--------------------------------------------------------------------------
    |
    | This file is for defining the abilities used in the application. Each
    | ability includes a name, a unique identifier (ability), the associated
    | model, and any dependencies on other abilities. This configuration helps
    | manage user permissions and access control throughout the application.
    |
    */

    'abilities' => [

        // Customer
        [
            'name' => 'view customer',
            'ability' => 'view-customer',
            'model' => Customer::class,
        ],
        [
            'name' => 'create customer',
            'ability' => 'create-customer',
            'model' => Customer::class,
            'depends_on' => [
                'view-customer',
                'view-custom-field',
            ],
        ],
        [
            'name' => 'edit customer',
            'ability' => 'edit-customer',
            'model' => Customer::class,
            'depends_on' => [
                'view-customer',
                'view-custom-field',
            ],
        ],
        [
            'name' => 'delete customer',
            'ability' => 'delete-customer',
            'model' => Customer::class,
            'depends_on' => [
                'view-customer',
            ],
        ],

        // Item
        [
            'name' => 'view item',
            'ability' => 'view-item',
            'model' => Item::class,
        ],
        [
            'name' => 'create item',
            'ability' => 'create-item',
            'model' => Item::class,
            'depends_on' => [
                'view-item',
                'view-tax-type',
            ],
        ],
        [
            'name' => 'edit item',
            'ability' => 'edit-item',
            'model' => Item::class,
            'depends_on' => [
                'view-item',
            ],
        ],
        [
            'name' => 'delete item',
            'ability' => 'delete-item',
            'model' => Item::class,
            'depends_on' => [
                'view-item',
            ],
        ],

        // Tax Type
        [
            'name' => 'view tax type',
            'ability' => 'view-tax-type',
            'model' => TaxType::class,
        ],
        [
            'name' => 'create tax type',
            'ability' => 'create-tax-type',
            'model' => TaxType::class,
            'depends_on' => [
                'view-tax-type',
            ],
        ],
        [
            'name' => 'edit tax type',
            'ability' => 'edit-tax-type',
            'model' => TaxType::class,
            'depends_on' => [
                'view-tax-type',
            ],
        ],
        [
            'name' => 'delete tax type',
            'ability' => 'delete-tax-type',
            'model' => TaxType::class,
            'depends_on' => [
                'view-tax-type',
            ],
        ],

        // Estimate
        [
            'name' => 'view estimate',
            'ability' => 'view-estimate',
            'model' => Estimate::class,
        ],
        [
            'name' => 'create estimate',
            'ability' => 'create-estimate',
            'model' => Estimate::class,
            'depends_on' => [
                'view-estimate',
                'view-item',
                'view-tax-type',
                'view-customer',
                'view-custom-field',
                'view-all-notes',
            ],
        ],
        [
            'name' => 'edit estimate',
            'ability' => 'edit-estimate',
            'model' => Estimate::class,
            'depends_on' => [
                'view-item',
                'view-estimate',
                'view-tax-type',
                'view-customer',
                'view-custom-field',
                'view-all-notes',
            ],
        ],
        [
            'name' => 'delete estimate',
            'ability' => 'delete-estimate',
            'model' => Estimate::class,
            'depends_on' => [
                'view-estimate',
            ],
        ],
        [
            'name' => 'send estimate',
            'ability' => 'send-estimate',
            'model' => Estimate::class,
        ],

        // Invoice
        [
            'name' => 'view invoice',
            'ability' => 'view-invoice',
            'model' => Invoice::class,
        ],
        [
            'name' => 'create invoice',
            'ability' => 'create-invoice',
            'model' => Invoice::class,
            'owner_only' => false,
            'depends_on' => [
                'view-item',
                'view-invoice',
                'view-tax-type',
                'view-customer',
                'view-custom-field',
                'view-all-notes',
            ],
        ],
        [
            'name' => 'edit invoice',
            'ability' => 'edit-invoice',
            'model' => Invoice::class,
            'depends_on' => [
                'view-item',
                'view-invoice',
                'view-tax-type',
                'view-customer',
                'view-custom-field',
                'view-all-notes',
            ],
        ],
        [
            'name' => 'delete invoice',
            'ability' => 'delete-invoice',
            'model' => Invoice::class,
            'depends_on' => [
                'view-invoice',
            ],
        ],
        [
            'name' => 'send invoice',
            'ability' => 'send-invoice',
            'model' => Invoice::class,
        ],

        // Recurring Invoice
        [
            'name' => 'view recurring invoice',
            'ability' => 'view-recurring-invoice',
            'model' => RecurringInvoice::class,
        ],
        [
            'name' => 'create recurring invoice',
            'ability' => 'create-recurring-invoice',
            'model' => RecurringInvoice::class,
            'depends_on' => [
                'view-item',
                'view-recurring-invoice',
                'view-tax-type',
                'view-customer',
                'view-all-notes',
                'send-invoice',
            ],
        ],
        [
            'name' => 'edit recurring invoice',
            'ability' => 'edit-recurring-invoice',
            'model' => RecurringInvoice::class,
            'depends_on' => [
                'view-item',
                'view-recurring-invoice',
                'view-tax-type',
                'view-customer',
                'view-all-notes',
                'send-invoice',
            ],
        ],
        [
            'name' => 'delete recurring invoice',
            'ability' => 'delete-recurring-invoice',
            'model' => RecurringInvoice::class,
            'depends_on' => [
                'view-recurring-invoice',
            ],
        ],

        // Payment
        [
            'name' => 'view payment',
            'ability' => 'view-payment',
            'model' => Payment::class,
        ],
        [
            'name' => 'create payment',
            'ability' => 'create-payment',
            'model' => Payment::class,
            'depends_on' => [
                'view-customer',
                'view-payment',
                'view-invoice',
                'view-custom-field',
                'view-all-notes',
            ],
        ],
        [
            'name' => 'edit payment',
            'ability' => 'edit-payment',
            'model' => Payment::class,
            'depends_on' => [
                'view-customer',
                'view-payment',
                'view-invoice',
                'view-custom-field',
                'view-all-notes',
            ],
        ],
        [
            'name' => 'delete payment',
            'ability' => 'delete-payment',
            'model' => Payment::class,
            'depends_on' => [
                'view-payment',
            ],
        ],
        [
            'name' => 'send payment',
            'ability' => 'send-payment',
            'model' => Payment::class,
        ],

        // Expense
        [
            'name' => 'view expense',
            'ability' => 'view-expense',
            'model' => Expense::class,
        ],
        [
            'name' => 'create expense',
            'ability' => 'create-expense',
            'model' => Expense::class,
            'depends_on' => [
                'view-customer',
                'view-expense',
                'view-custom-field',
            ],
        ],
        [
            'name' => 'edit expense',
            'ability' => 'edit-expense',
            'model' => Expense::class,
            'depends_on' => [
                'view-customer',
                'view-expense',
                'view-custom-field',
            ],
        ],
        [
            'name' => 'delete expense',
            'ability' => 'delete-expense',
            'model' => Expense::class,
            'depends_on' => [
                'view-expense',
            ],
        ],

        // Custom Field
        [
            'name' => 'view custom field',
            'ability' => 'view-custom-field',
            'model' => CustomField::class,
        ],
        [
            'name' => 'create custom field',
            'ability' => 'create-custom-field',
            'model' => CustomField::class,
            'depends_on' => [
                'view-custom-field',
            ],
        ],
        [
            'name' => 'edit custom field',
            'ability' => 'edit-custom-field',
            'model' => CustomField::class,
            'depends_on' => [
                'view-custom-field',
            ],
        ],
        [
            'name' => 'delete custom field',
            'ability' => 'delete-custom-field',
            'model' => CustomField::class,
            'depends_on' => [
                'view-custom-field',
            ],
        ],

        // Financial Reports
        [
            'name' => 'view financial reports',
            'ability' => 'view-financial-reports',
            'model' => null,
        ],

        // Exchange Rate Provider
        [
            'name' => 'view exchange rate provider',
            'ability' => 'view-exchange-rate-provider',
            'model' => ExchangeRateProvider::class,
            'owner_only' => false,
        ],
        [
            'name' => 'create exchange rate provider',
            'ability' => 'create-exchange-rate-provider',
            'model' => ExchangeRateProvider::class,
            'owner_only' => false,
            'depends_on' => [
                'view-exchange-rate-provider',
            ],
        ],
        [
            'name' => 'edit exchange rate provider',
            'ability' => 'edit-exchange-rate-provider',
            'model' => ExchangeRateProvider::class,
            'owner_only' => false,
            'depends_on' => [
                'view-exchange-rate-provider',
            ],
        ],
        [
            'name' => 'delete exchange rate provider',
            'ability' => 'delete-exchange-rate-provider',
            'model' => ExchangeRateProvider::class,
            'owner_only' => false,
            'depends_on' => [
                'view-exchange-rate-provider',
            ],
        ],

        // Settings
        [
            'name' => 'view company dashboard',
            'ability' => 'dashboard',
            'model' => null,
        ],
        [
            'name' => 'view all notes',
            'ability' => 'view-all-notes',
            'model' => Note::class,
        ],
        [
            'name' => 'manage notes',
            'ability' => 'manage-all-notes',
            'model' => Note::class,
            'depends_on' => [
                'view-all-notes',
            ],
        ],
    ],
];
