<?php

/*
|--------------------------------------------------------------------------
| DBCore 核心配置文件
|--------------------------------------------------------------------------
|
| 本文件是 DBCore for Laravel + Filament 的主配置入口。
| 宿主应用执行 vendor:publish --tag=dbcore-config 后可在 config/dbcore.php
| 中覆盖任意配置项，包内默认值通过 mergeConfigFrom() 兜底。
|
| 配置分组说明：
|   enabled      — 包全局总开关
|   modules      — 核心模块启用开关
|   setting      — 系统设置模块配置
|   plugin       — 插件系统配置
|   filesystem   — 文件系统配置
|   auth         — 认证模块配置
|   permission   — 权限模块配置
|   admin        — 后台管理配置
|   audit        — 审计日志配置
|   notification — 通知模块配置
|
| 诊断命令：
|   php artisan dbcore:check  — 检查 DBCore 接入状态
|
| 重要边界提醒：
|   - DBCore 为基础设施层，不包含业务逻辑
|   - Payment、订单、商品、会员、库存等应在宿主层处理
|   - 在线更新、授权校验等商业化能力不属于 DBCore 核心职责
|
*/

return [

    /*
    |--------------------------------------------------------------------------
    | 全局总开关
    |--------------------------------------------------------------------------
    |
    | 设为 false 时，DBCoreServiceProvider 将跳过所有模块绑定与引导，
    | 可通过环境变量 DBCORE_ENABLED=false 在非生产环境完全禁用包。
    |
    | 默认值: true
    | 示例: DBCORE_ENABLED=false  # 在 .env 中禁用
    |
    */

    'enabled' => env('DBCORE_ENABLED', true),

    /*
    |--------------------------------------------------------------------------
    | 核心模块启用开关
    |--------------------------------------------------------------------------
    |
    | 每个键对应一个核心模块，值为 true 时模块正常加载。
    | 设为 false 可在不需要某模块的宿主项目中禁用，
    | 减少不必要的 ServiceProvider 注册与资源加载。
    |
    | 典型用法：
    |   - 不需要插件系统: DBCORE_MODULE_PLUGIN=false
    |   - 不需要审计日志: DBCORE_MODULE_AUDIT=false
    |
    */

    'modules' => [
        // 基础支撑工具集（helpers、macros、traits 等）
        'support'      => env('DBCORE_MODULE_SUPPORT', true),

        // 后台管理入口（Filament Panel、菜单注册等）
        'admin'        => env('DBCORE_MODULE_ADMIN', true),

        // 认证模块（登录、登出、Token 管理等）
        'auth'         => env('DBCORE_MODULE_AUTH', true),

        // 权限模块（角色、权限点、策略绑定等）
        'permission'   => env('DBCORE_MODULE_PERMISSION', true),

        // 插件系统（插件注册、生命周期管理等）
        'plugin'       => env('DBCORE_MODULE_PLUGIN', true),

        // 系统设置（键值存储、缓存、后台配置页等）
        'setting'      => env('DBCORE_MODULE_SETTING', true),

        // 文件系统（上传策略、访问控制、存储适配等）
        'filesystem'   => env('DBCORE_MODULE_FILESYSTEM', true),

        // 审计日志（操作记录、变更快照、日志清理等）
        'audit'        => env('DBCORE_MODULE_AUDIT', true),

        // 通知（站内信、邮件、广播等多频道通知）
        'notification' => env('DBCORE_MODULE_NOTIFICATION', true),
    ],

    /*
    |--------------------------------------------------------------------------
    | 系统设置模块配置
    |--------------------------------------------------------------------------
    |
    | driver        存储驱动，当前支持 'database'，后续可扩展 'file'。
    |               默认值: 'database'
    |
    | table         存储设置项的数据表名，对应 Migration 中的 core_settings。
    |               默认值: 'core_settings' (不建议修改)
    |
    | cache_enabled 【第三阶段后置】缓存开关，当前 DatabaseSettingRepository 无缓存层，
    |               此开关保留供第三阶段内存 + Laravel Cache 双层缓存实现时联动。
    |               默认值: true
    |
    | cache_key     【第三阶段后置】Laravel Cache 缓存键前缀，缓存层实现后生效。
    |               默认值: 'dbcore.settings'
    |
    | cache_ttl     【第三阶段后置】缓存 TTL（秒），0 表示永不过期，缓存层实现后生效。
    |               默认值: 0
    |
    */

    'setting' => [
        'driver'        => env('DBCORE_SETTING_DRIVER', 'database'),
        'table'         => 'core_settings',
        'cache_enabled' => env('DBCORE_SETTING_CACHE', true),
        'cache_key'     => env('DBCORE_SETTING_CACHE_KEY', 'dbcore.settings'),
        'cache_ttl'     => env('DBCORE_SETTING_CACHE_TTL', 0),
    ],

    /*
    |--------------------------------------------------------------------------
    | 插件系统配置
    |--------------------------------------------------------------------------
    |
    | scan_paths    启动时自动扫描的插件目录列表，相对于 base_path()。
    |               支持配置多个路径，便于宿主扩展自定义插件目录。
    |               默认值: ['plugins']
    |               示例: 在 .env 中设置 DBCORE_PLUGIN_PATH=packages/plugins
    |
    | cache_enabled 是否缓存已扫描到的插件清单，减少重复 I/O。
    |               默认值: true
    |
    | cache_key     插件清单在 Laravel Cache 中的缓存键名。
    |               默认值: 'dbcore.plugins'
    |
    | 插件扫描错误查看方式:
    |   - 命令行: php artisan dbcore:check
    |   - 代码中: app(PluginManager::class)->formatScanErrors()
    |
    */

    'plugin' => [
        'scan_paths'    => [
            env('DBCORE_PLUGIN_PATH', 'plugins'),
        ],
        'cache_enabled' => env('DBCORE_PLUGIN_CACHE', true),
        'cache_key'     => env('DBCORE_PLUGIN_CACHE_KEY', 'dbcore.plugins'),
    ],

    /*
    |--------------------------------------------------------------------------
    | 文件系统配置
    |--------------------------------------------------------------------------
    |
    | default_disk 默认使用的 Laravel 磁盘名称（对应 config/filesystems.php
    |              中 disks 的键名），DBCore 文件操作未指定磁盘时使用此值。
    |              默认值: 'local'
    |              常见可选值: 'local', 'public', 's3'
    |
    */

    'filesystem' => [
        'default_disk' => env('DBCORE_FILESYSTEM_DISK', 'local'),
    ],

    /*
    |--------------------------------------------------------------------------
    | 认证模块配置
    |--------------------------------------------------------------------------
    |
    | guard 认证守卫名称，对应 config/auth.php 中 guards 的键名。
    |       DBCore Admin 后台默认使用独立守卫，与宿主前台用户隔离。
    |       默认值: 'web'
    |       示例: DBCORE_AUTH_GUARD=admin  # 使用独立的后台守卫
    |
    */

    'auth' => [
        'guard' => env('DBCORE_AUTH_GUARD', 'web'),
    ],

    /*
    |--------------------------------------------------------------------------
    | 权限模块配置
    |--------------------------------------------------------------------------
    |
    | driver 权限驱动：
    |        'spatie'   — 基于 spatie/laravel-permission（推荐）
    |        'laravel'  — 仅使用 Laravel 原生 Gate / Policy
    |        默认值: 'spatie'
    |
    | 注意: 使用 'spatie' 驱动时需确保已安装 spatie/laravel-permission 包，
    |       否则将自动回退到 Laravel Gate 模式。
    |
    */

    'permission' => [
        'driver' => env('DBCORE_PERMISSION_DRIVER', 'spatie'),
    ],

    /*
    |--------------------------------------------------------------------------
    | 后台管理配置
    |--------------------------------------------------------------------------
    |
    | panel_id           Filament Panel 注册标识，唯一，宿主多 Panel 时需区分。
    |                    默认值: 'admin'
    |
    | panel_path         后台访问路径前缀，最终 URL 形如 /admin。
    |                    默认值: 'admin'
    |                    示例: DBCORE_ADMIN_PANEL_PATH=backend  # 访问 /backend
    |
    | navigation_enabled 是否启用 DBCore 动态导航注册机制；
    |                    false 时宿主可完全接管 Filament 导航配置。
    |                    默认值: true
    |
    */

    'admin' => [
        'panel_id'           => env('DBCORE_ADMIN_PANEL_ID', 'admin'),
        'panel_path'         => env('DBCORE_ADMIN_PANEL_PATH', 'admin'),
        'navigation_enabled' => env('DBCORE_ADMIN_NAVIGATION', true),
    ],

    /*
    |--------------------------------------------------------------------------
    | 审计日志配置
    |--------------------------------------------------------------------------
    |
    | enabled        模块级开关，false 时跳过所有审计写入。
    |                默认值: true
    |
    | driver         存储驱动：
    |                'database' — 写入 core_audit_logs 表（推荐）
    |                'log'      — 写入 Laravel 日志文件
    |                默认值: 'database'
    |
    | retention_days 日志保留天数，0 表示永不自动清理。
    |                默认值: 90 (即 90 天)
    |                示例: DBCORE_AUDIT_RETENTION_DAYS=180  # 保留 180 天
    |
    */

    'audit' => [
        'enabled'        => env('DBCORE_AUDIT_ENABLED', true),
        'driver'         => env('DBCORE_AUDIT_DRIVER', 'database'),
        'retention_days' => env('DBCORE_AUDIT_RETENTION_DAYS', 90),
    ],

    /*
    |--------------------------------------------------------------------------
    | 通知模块配置
    |--------------------------------------------------------------------------
    |
    | enabled         模块级开关，false 时禁用 DBCore 通知分发逻辑。
    |                 默认值: true
    |
    | default_channel 默认通知频道，可选值：
    |                 'database'  — 站内通知（写入 notifications 表）
    |                 'mail'      — 邮件通知
    |                 'broadcast' — 实时广播通知
    |                 默认值: 'database'
    |
    */

    'notification' => [
        'enabled'         => env('DBCORE_NOTIFICATION_ENABLED', true),
        'default_channel' => env('DBCORE_NOTIFICATION_CHANNEL', 'database'),
    ],

];
