⚙️
{{ __('radio.go_to_radio_settings') }}
diff --git a/resources/views/admin/radio/wizard/_test-results.blade.php b/resources/views/admin/radio/wizard/_test-results.blade.php
new file mode 100755
index 0000000..28192e8
--- /dev/null
+++ b/resources/views/admin/radio/wizard/_test-results.blade.php
@@ -0,0 +1,64 @@
+@php
+ $statusLabels = [
+ 'success' => __('radio.wizard.status_success'),
+ 'warning' => __('radio.wizard.status_warning'),
+ 'error' => __('radio.wizard.status_error'),
+ 'skipped' => __('radio.wizard.status_skipped'),
+ 'untested' => __('radio.wizard.status_untested'),
+ ];
+ $statusIcons = [
+ 'success' => '✅',
+ 'warning' => '⚠️',
+ 'error' => '❌',
+ 'skipped' => '⏭️',
+ 'untested' => '❓',
+ ];
+ $testNames = [
+ 'stream' => '📡 ' . __('radio.wizard.test_result_stream'),
+ 'now_playing' => '🎵 ' . __('radio.wizard.test_result_now_playing'),
+ 'listeners' => '👥 ' . __('radio.wizard.test_result_listeners'),
+ ];
+@endphp
+
+@foreach(['stream', 'now_playing', 'listeners'] as $key)
+ @php $result = $results[$key] ?? null; @endphp
+ @if($result)
+
+
+ {{ $statusIcons[$result['status']] ?? '❓' }} {{ $testNames[$key] ?? $key }}
+ {{ $statusLabels[$result['status']] ?? $result['status'] }}
+
+
+ {{ $result['message'] }}
+ @if(!empty($result['content_type']))
+
{{ __('radio.wizard.content_type') }}: {{ $result['content_type'] }}
+ @endif
+ @if(!empty($result['http_code']))
+
{{ __('radio.wizard.http_status') }}: {{ $result['http_code'] }}
+ @endif
+ @if(!empty($result['song']))
+
{{ __('radio.wizard.song') }}: {{ $result['song'] }}
+ @endif
+ @if(!empty($result['artist']))
+ {{ __('radio.wizard.artist') }}: {{ $result['artist'] }}
+ @endif
+ @if(isset($result['count']))
+
{{ __('radio.wizard.listeners') }}: {{ $result['count'] }}
+ @endif
+ @if(!empty($result['api_url']))
+
{{ __('radio.wizard.api_url') }}: {{ $result['api_url'] }}
+ @endif
+
+
+ @endif
+@endforeach
+
+
+ @if(($results['stream']['status'] ?? '') === 'success' || ($results['stream']['status'] ?? '') === 'warning')
+
✅ {{ __('radio.wizard.test_stream_ok') }}
+ @elseif(($results['stream']['status'] ?? '') === 'error')
+
❌ {{ __('radio.wizard.test_stream_fail') }}
+ @else
+
{{ __('radio.wizard.test_not_run') }}
+ @endif
+
diff --git a/resources/views/admin/radio/wizard/step-1.blade.php b/resources/views/admin/radio/wizard/step-1.blade.php
new file mode 100755
index 0000000..5ae02df
--- /dev/null
+++ b/resources/views/admin/radio/wizard/step-1.blade.php
@@ -0,0 +1,99 @@
+@extends('layouts.app')
+
+@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 1 - ' . config('app.name'))
+
+@push('styles')
+
+@endpush
+
+@section('content')
+
+
+
+
+
1
+
+
2
+
+
3
+
+
4
+
+
5
+
+
+ {{ __('radio.wizard.step1_label') }}
+ {{ __('radio.wizard.step2_label') }}
+ {{ __('radio.wizard.step3_label') }}
+ {{ __('radio.wizard.step4_label') }}
+ {{ __('radio.wizard.step5_label') }}
+
+
+
+
+
+
+@endsection
diff --git a/resources/views/admin/radio/wizard/step-2.blade.php b/resources/views/admin/radio/wizard/step-2.blade.php
new file mode 100755
index 0000000..7496aa5
--- /dev/null
+++ b/resources/views/admin/radio/wizard/step-2.blade.php
@@ -0,0 +1,118 @@
+@extends('layouts.app')
+
+@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 2 - ' . config('app.name'))
+
+@push('styles')
+
+@endpush
+
+@section('content')
+
+
+
+
+
✓
+
+
2
+
+
3
+
+
4
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }}
+ {{ __('radio.wizard.step2_label') }}
+ {{ __('radio.wizard.step3_label') }}
+ {{ __('radio.wizard.step4_label') }}
+ {{ __('radio.wizard.step5_label') }}
+
+
+
+
+@endsection
diff --git a/resources/views/admin/radio/wizard/step-3.blade.php b/resources/views/admin/radio/wizard/step-3.blade.php
new file mode 100755
index 0000000..5f53157
--- /dev/null
+++ b/resources/views/admin/radio/wizard/step-3.blade.php
@@ -0,0 +1,152 @@
+@extends('layouts.app')
+
+@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 3 - ' . config('app.name'))
+
+@push('styles')
+
+@endpush
+
+@section('content')
+
+
+
+
+
✓
+
+
✓
+
+
3
+
+
4
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }}
+ ✓ {{ __('radio.wizard.step2_label') }}
+ {{ __('radio.wizard.step3_label') }}
+ {{ __('radio.wizard.step4_label') }}
+ {{ __('radio.wizard.step5_label') }}
+
+
+
+ @if($autoDetected && $autoDetected['detected'])
+
+
+
✅
+
+
{{ ucfirst($autoDetected['type']) }} {{ __('radio.wizard.detected') }}
+
{{ __('radio.wizard.detected_desc') }}
+
+
+
+ @elseif($autoDetected)
+
+
+
⚠️
+
+
{{ __('radio.wizard.not_detected') }}
+
{{ __('radio.wizard.not_detected_desc') }}
+
+
+
+ @endif
+
+
+
+
+@endsection
diff --git a/resources/views/admin/radio/wizard/step-4.blade.php b/resources/views/admin/radio/wizard/step-4.blade.php
new file mode 100755
index 0000000..c249bc0
--- /dev/null
+++ b/resources/views/admin/radio/wizard/step-4.blade.php
@@ -0,0 +1,211 @@
+@extends('layouts.app')
+
+@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 4 - ' . config('app.name'))
+
+@push('styles')
+
+@endpush
+
+@section('content')
+
+
+
+
+
✓
+
+
✓
+
+
✓
+
+
4
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }}
+ ✓ {{ __('radio.wizard.step2_label') }}
+ ✓ {{ __('radio.wizard.step3_label') }}
+ {{ __('radio.wizard.step4_label') }}
+ {{ __('radio.wizard.step5_label') }}
+
+
+
+
+
+
+@endsection
diff --git a/resources/views/admin/radio/wizard/step-5.blade.php b/resources/views/admin/radio/wizard/step-5.blade.php
new file mode 100755
index 0000000..6fd96f2
--- /dev/null
+++ b/resources/views/admin/radio/wizard/step-5.blade.php
@@ -0,0 +1,223 @@
+@extends('layouts.app')
+
+@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 5 - ' . config('app.name'))
+
+@push('styles')
+
+@endpush
+
+@section('content')
+
+
+
+
+
✓
+
+
✓
+
+
✓
+
+
✓
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }}
+ ✓ {{ __('radio.wizard.step2_label') }}
+ ✓ {{ __('radio.wizard.step3_label') }}
+ ✓ {{ __('radio.wizard.step4_label') }}
+ {{ __('radio.wizard.step5_label') }}
+
+
+ @if(session('error'))
+
+ {{ session('error') }}
+
+ @endif
+
+
+
+ 🔌 {{ __('radio.wizard.test_title') }}
+
+
{{ __('radio.wizard.test_desc') }}
+
+
+
+
+
{{ __('radio.wizard.test_loading') }}
+
+
+
+ @if($testResults)
+ @include('admin.radio.wizard._test-results', ['results' => $testResults])
+ @else
+
{{ __('radio.wizard.test_prompt') }}
+ @endif
+
+
+
+
+
+
+
+
+
+
+ 📋 {{ __('radio.wizard.settings_overview') }}
+
+
{{ __('radio.wizard.settings_overview_desc') }}
+
+
+ @foreach($settingsList as $key => $value)
+
+ {{ $key }}
+ {{ $value }}
+
+ @endforeach
+
+
+
+
+
+
+
+@endsection
diff --git a/routes/admin.php b/routes/admin.php
index 8b5996c..319f7a2 100755
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -1,6 +1,7 @@
group(function () {
Route::get('/radio/setup', [RadioSetupController::class, 'index'])->name('admin.radio.setup');
Route::post('/radio/setup', [RadioSetupController::class, 'setup'])->name('admin.radio.setup.post');
+
+ // Radio wizard (multi-step)
+ Route::prefix('radio/wizard')->group(function () {
+ Route::get('/', [RadioWizardController::class, 'index'])->name('admin.radio.wizard');
+ Route::post('/step-1', [RadioWizardController::class, 'processStep1'])->name('admin.radio.wizard.process-step-1');
+ Route::get('/step/{step}', [RadioWizardController::class, 'step'])->name('admin.radio.wizard.step')->where('step', '[2-5]');
+ Route::post('/step-2', [RadioWizardController::class, 'processStep2'])->name('admin.radio.wizard.process-step-2');
+ Route::post('/step-3', [RadioWizardController::class, 'processStep3'])->name('admin.radio.wizard.process-step-3');
+ Route::post('/step-4', [RadioWizardController::class, 'processStep4'])->name('admin.radio.wizard.process-step-4');
+ Route::get('/test', [RadioWizardController::class, 'runTest'])->name('admin.radio.wizard.test');
+ Route::post('/complete', [RadioWizardController::class, 'complete'])->name('admin.radio.wizard.complete');
+ });
});
// Furni editor API