<?php

namespace App\Http\Controllers\SuperAdmin;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Inertia\Inertia;
use Inertia\Response;

class ModuleController extends Controller
{
    public function index(): Response
    {
        $modules = DB::table('modules')
            ->leftJoin('module_dependencies', 'module_dependencies.module_id', '=', 'modules.id')
            ->leftJoin('modules as required', 'required.id', '=', 'module_dependencies.required_module_id')
            ->select([
                'modules.id',
                'modules.key_name',
                'modules.name_fa',
                'modules.is_core',
                'modules.is_sellable',
                'modules.status',
                DB::raw("GROUP_CONCAT(required.key_name ORDER BY required.key_name SEPARATOR ' + ') as dependencies"),
            ])
            ->groupBy('modules.id', 'modules.key_name', 'modules.name_fa', 'modules.is_core', 'modules.is_sellable', 'modules.status')
            ->orderByDesc('modules.is_core')
            ->orderBy('modules.key_name')
            ->get();

        return Inertia::render('SuperAdmin/Modules', [
            'modules' => $modules->map(fn ($module): array => [
                'keyName' => $module->key_name,
                'name' => $module->name_fa,
                'dependency' => $module->dependencies ?: ((bool) $module->is_core ? 'اجباری' : 'ندارد'),
                'status' => $this->statusLabel($module->status, (bool) $module->is_sellable),
            ])->values(),
            'cards' => [
                'وابستگی‌ها',
                'permissionها',
                'محدودیت پایه‌ها',
                'پکیج کامل',
            ],
        ]);
    }

    private function statusLabel(string $status, bool $sellable): string
    {
        if ($status !== 'active') {
            return 'غیرفعال';
        }

        return $sellable ? 'قابل فروش' : 'اجباری';
    }
}
