<?php
declare(strict_types=1);

use App\Core\Registries\MenuRegistry;
use App\Core\Registries\PermissionRegistry;
use App\Modules\Sales\Services\CommissionService;

// ────────────────────────────────────────────────────────────
// Sales — Event Listeners
// ────────────────────────────────────────────────────────────

CommissionService::registerListeners();

// ────────────────────────────────────────────────────────────
// Sales — Permissions
// ────────────────────────────────────────────────────────────

PermissionRegistry::register('sales', [
    'sales.view'              => ['ar' => 'عرض المبيعات',           'en' => 'View Sales'],
    'sales.create'            => ['ar' => 'إنشاء عملية بيع',        'en' => 'Create Sale'],
    'sales.void'              => ['ar' => 'إلغاء عملية بيع',         'en' => 'Void Sale'],
    'sales.refund'            => ['ar' => 'استرجاع مبيعات',          'en' => 'Refund Sale'],
    'package.view'            => ['ar' => 'عرض الباقات',             'en' => 'View Packages'],
    'package.manage'          => ['ar' => 'إدارة الباقات',            'en' => 'Manage Packages'],
    'report.sales'            => ['ar' => 'تقارير المبيعات',          'en' => 'Sales Reports'],
    'sales.commission.view'   => ['ar' => 'عرض العمولات',            'en' => 'View Commissions'],
    'sales.commission.manage' => ['ar' => 'إدارة المندوبين والعمولات','en' => 'Manage Reps & Commissions'],
    'sales.pricing.view'      => ['ar' => 'عرض تسعير العملاء',       'en' => 'View Customer Pricing'],
    'sales.pricing.manage'    => ['ar' => 'إدارة تسعير العملاء',      'en' => 'Manage Customer Pricing'],
    'sales.referral.view'     => ['ar' => 'عرض تقرير إحالات الأعضاء', 'en' => 'View Member Referral Report'],
]);

// ────────────────────────────────────────────────────────────
// Sales — Sidebar menu
// ────────────────────────────────────────────────────────────

MenuRegistry::register('sales', [
    'label_ar'   => 'المبيعات',
    'label_en'   => 'Sales & POS',
    'icon'       => 'shopping-cart',
    'route'      => '/sales',
    'permission' => 'sales.view',
    'parent'     => null,
    'order'      => 420,
    'children'   => [
        ['label_ar' => 'نقطة البيع',   'label_en' => 'POS',              'route' => '/sales/create',          'permission' => 'sales.create',  'order' => 1],
        ['label_ar' => 'كل المبيعات',  'label_en' => 'All Sales',        'route' => '/sales',                 'permission' => 'sales.view',    'order' => 2],
        ['label_ar' => 'الباقات',      'label_en' => 'Packages',         'route' => '/sales/packages',        'permission' => 'package.view',  'order' => 3],
        ['label_ar' => 'تقرير يومي',   'label_en' => 'Daily Report',     'route' => '/sales/reports/daily',                  'permission' => 'report.sales',            'order' => 4],
        ['label_ar' => 'تقرير شهري',   'label_en' => 'Monthly Report',   'route' => '/sales/reports/monthly',                'permission' => 'report.sales',            'order' => 5],
        ['label_ar' => 'المندوبون',    'label_en' => 'Sales Reps',       'route' => '/sales/commissions/representatives',    'permission' => 'sales.commission.view',   'order' => 6],
        ['label_ar' => 'العمولات',     'label_en' => 'Commissions',      'route' => '/sales/commissions/report',             'permission' => 'sales.commission.view',   'order' => 7],
        ['label_ar' => 'تسعير العملاء','label_en' => 'Customer Pricing', 'route' => '/sales/pricing/customer',               'permission' => 'sales.pricing.view',      'order' => 8],
        ['label_ar' => 'إحالات الأعضاء', 'label_en' => 'Member Referrals', 'route' => '/sales/referrals', 'permission' => 'sales.referral.view', 'order' => 9],
    ],
]);

// ────────────────────────────────────────────────────────────
// Sales — Member Referral Commission (on activation)
// ────────────────────────────────────────────────────────────

\App\Core\EventBus::listen('member.activated', function (array $data): void {
    $memberId = (int) ($data['member_id'] ?? $data['id'] ?? 0);
    if ($memberId > 0) {
        \App\Modules\Sales\Services\ReferralCommissionService::onMemberActivated($memberId);
    }
}, 60);
