<?php

/**
 * 관리자 API 라우트 (v1)
 *
 * - 테넌트 사용자 관리
 * - 글로벌 메뉴 관리
 * - FCM 관리자용 API
 */

use App\Http\Controllers\Api\Admin\GlobalMenuController;
use App\Http\Controllers\Api\V1\Admin\FcmController;
use App\Http\Controllers\Api\V1\AdminController;
use Illuminate\Support\Facades\Route;

// Tenant Admin API
Route::prefix('admin')->group(function () {
    // 목록/생성
    Route::get('users', [AdminController::class, 'index'])->name('v1.admin.users.index');                   // 테넌트 사용자 목록 조회
    Route::post('users', [AdminController::class, 'store'])->name('v1.admin.users.store');                  // 테넌트 사용자 생성

    // 단건
    Route::get('users/{id}', [AdminController::class, 'show'])->name('v1.admin.users.show');                // 테넌트 사용자 단건 조회
    Route::put('users/{id}', [AdminController::class, 'update'])->name('v1.admin.users.update');            // 테넌트 사용자 수정

    // 소프트 삭제 복구
    Route::delete('users/{id}', [AdminController::class, 'destroy'])->name('v1.admin.users.destroy');                   // 테넌트 사용자 삭제(연결 삭제)
    Route::post('users/{id}/restore', [AdminController::class, 'restore'])->name('v1.admin.users.restore');             // 테넌트 사용자 삭제 복구

    // 상태 토글
    Route::patch('users/{id}/status', [AdminController::class, 'toggle'])->name('v1.admin.users.status.toggle');       // 테넌트 사용자 활성/비활성

    // 역할 부여/해제
    Route::post('users/{id}/roles', [AdminController::class, 'attach'])->name('v1.admin.users.roles.attach');           // 테넌트 사용자 역할 부여
    Route::delete('users/{id}/roles/{role}', [AdminController::class, 'detach'])->name('v1.admin.users.roles.detach');  // 테넌트 사용자 역할 해제

    // 비밀번호 초기화
    Route::post('users/{id}/reset-password', [AdminController::class, 'reset'])->name('v1.admin.users.password.reset'); // 테넌트 사용자 비밀번호 초기화

    // 글로벌 메뉴 관리 (시스템 관리자용)
    Route::prefix('global-menus')->group(function () {
        Route::get('/', [GlobalMenuController::class, 'index'])->name('v1.admin.global-menus.index');           // 글로벌 메뉴 목록
        Route::post('/', [GlobalMenuController::class, 'store'])->name('v1.admin.global-menus.store');           // 글로벌 메뉴 생성
        Route::get('/tree', [GlobalMenuController::class, 'tree'])->name('v1.admin.global-menus.tree');          // 글로벌 메뉴 트리
        Route::get('/stats', [GlobalMenuController::class, 'stats'])->name('v1.admin.global-menus.stats');       // 글로벌 메뉴 통계
        Route::post('/reorder', [GlobalMenuController::class, 'reorder'])->name('v1.admin.global-menus.reorder'); // 글로벌 메뉴 순서 변경
        Route::get('/{id}', [GlobalMenuController::class, 'show'])->name('v1.admin.global-menus.show');          // 글로벌 메뉴 단건 조회
        Route::put('/{id}', [GlobalMenuController::class, 'update'])->name('v1.admin.global-menus.update');      // 글로벌 메뉴 수정
        Route::delete('/{id}', [GlobalMenuController::class, 'destroy'])->name('v1.admin.global-menus.destroy'); // 글로벌 메뉴 삭제
        Route::post('/{id}/sync-to-tenants', [GlobalMenuController::class, 'syncToTenants'])->name('v1.admin.global-menus.sync-to-tenants'); // 테넌트에 동기화
    });

    // Admin FCM API (MNG 관리자용 FCM 발송) - API Key 인증만 사용
    Route::prefix('fcm')->group(function () {
        Route::post('/send', [FcmController::class, 'send'])->name('v1.admin.fcm.send');                    // FCM 발송
        Route::get('/preview-count', [FcmController::class, 'previewCount'])->name('v1.admin.fcm.preview'); // 대상 토큰 수 미리보기
        Route::get('/tokens', [FcmController::class, 'tokens'])->name('v1.admin.fcm.tokens');               // 토큰 목록
        Route::get('/tokens/stats', [FcmController::class, 'tokenStats'])->name('v1.admin.fcm.tokens.stats'); // 토큰 통계
        Route::patch('/tokens/{id}/toggle', [FcmController::class, 'toggleToken'])->name('v1.admin.fcm.tokens.toggle'); // 토큰 상태 토글
        Route::delete('/tokens/{id}', [FcmController::class, 'deleteToken'])->name('v1.admin.fcm.tokens.delete');       // 토큰 삭제
        Route::get('/history', [FcmController::class, 'history'])->name('v1.admin.fcm.history');            // 발송 이력
    });
});
