# Setup Guide

## Prasyarat

- Role `user` dengan guard `user` (guna `Spatie\Permission`)
- Frontend user dengan role `user` 
- Menu categories (optional)
- Frontend menus

## Step-by-Step

### 1. Buat Role

```bash
php artisan tinker
```

```php
use Spatie\Permission\Models\Role;

// Untuk user panel
Role::firstOrCreate(['name' => 'user', 'guard_name' => 'user']);

// Untuk public CMS site navigation
Role::firstOrCreate(['name' => 'public', 'guard_name' => 'web']);
```

### 2. Assign Role ke User

```php
$user = \App\Models\Backend\FrontendUser::find(1);
$user->assignRole('user');
```

### 3. Buat Menu Categories (Admin Panel)

Menu → Frontend Menu Category → Create Category

Contoh:
| Name | Description |
|---|---|
| Main Navigation | Menu utama sidebar |
| User Settings | Menu tetapan akaun |

### 4. Buat Menu Items (Admin Panel)

Menu → Frontend Menu → Create Menu

Contoh:
| Name | Link | Icon |
|---|---|---|
| Dashboard | `user.dashboard` | `fa-solid fa-table-cells-large` |
| Profile | `user.profile.edit` | `fa-regular fa-user` |

> **Link** boleh jadi route name (e.g. `user.dashboard`) atau URL path (e.g. `/about`).

### 5. Assign Menu ke Role (Admin Panel)

Menu → Frontend Menu → Assign Menu

1. Pilih role (e.g. `user`)
2. Isi borang:
   - **Menu**: Pilih menu item
   - **Menu Group**: `SIDEBAR` (untuk user panel), `PUBLIC` (untuk public site) — optional
   - **Category**: Pilih kategori untuk group
   - **Site ID / Page ID**: Biar 0 (semua site/page) — untuk public CMS filtering
   - **Active**: Centang
3. Klik Assign Menu

### 6. Untuk Public CMS Site Navigation

Assign menu dengan `role_code = public` dan `category_id = main-navbar category`.

Menu akan muncul di navigation bar landing page (`home.layouts.master`).

## Seed Data (Quick Setup)

```php
use App\Models\Backend\FrontendUser;
use App\Models\Backend\menu\frontend\Menu;
use App\Models\Backend\menu\frontend\MenuCategory;
use App\Models\Backend\menu\frontend\RoleMapping;
use Spatie\Permission\Models\Role;

// Role
$role = Role::firstOrCreate(['name' => 'user', 'guard_name' => 'user']);
Role::firstOrCreate(['name' => 'public', 'guard_name' => 'web']);

// Assign role ke user
$user = FrontendUser::find(1);
$user?->assignRole('user');

// Categories
$cat1 = MenuCategory::firstOrCreate(
    ['category_name' => 'Main Navigation'],
    ['category_description' => 'Main menu', 'category_status' => true, 'created_by' => 1]
);
$cat2 = MenuCategory::firstOrCreate(
    ['category_name' => 'User Settings'],
    ['category_description' => 'Account settings', 'category_status' => true, 'created_by' => 1]
);

// Menu items
$menuDash = Menu::firstOrCreate(
    ['menu_name' => 'Dashboard'],
    ['menu_link' => 'user.dashboard', 'menu_status' => true, 'menu_parent_id' => 0]
);
$menuProfile = Menu::firstOrCreate(
    ['menu_name' => 'Profile'],
    ['menu_link' => 'user.profile.edit', 'menu_status' => true, 'menu_parent_id' => 0]
);

// Assign menus to role with categories
RoleMapping::firstOrCreate(
    ['role_code' => 'user', 'menu_id' => $menuDash->menu_id, 'category_id' => $cat1->category_id],
    ['sort' => 1, 'status' => true, 'created_by' => '1']
);
RoleMapping::firstOrCreate(
    ['role_code' => 'user', 'menu_id' => $menuProfile->menu_id, 'category_id' => $cat2->category_id],
    ['sort' => 1, 'status' => true, 'created_by' => '1']
);
```
