<?php

/**
 * 사용자 API 라우트 (v1)
 *
 * - 사용자 관리
 * - 사용자 초대
 * - 알림 설정
 * - 계정 관리 (탈퇴, 약관동의)
 * - 프로필 관리
 */

use App\Http\Controllers\Api\V1\AccountController;
use App\Http\Controllers\Api\V1\NotificationSettingController;
use App\Http\Controllers\Api\V1\TenantUserProfileController;
use App\Http\Controllers\Api\V1\UserController;
use App\Http\Controllers\Api\V1\UserInvitationController;
use App\Http\Controllers\Api\V1\UserRoleController;
use Illuminate\Support\Facades\Route;

// Member API
Route::prefix('users')->group(function () {
    Route::get('index', [UserController::class, 'index'])->name('v1.users.index');                            // 회원 목록 조회
    Route::get('show/{user_no}', [UserController::class, 'show'])->name('v1.users.show');                     // 회원 상세 조회

    Route::get('me', [UserController::class, 'me'])->name('v1.users.users.me');                               // 내 정보 조회
    Route::put('me', [UserController::class, 'meUpdate'])->name('v1.users.me.update');                        // 내 정보 수정
    Route::put('me/password', [UserController::class, 'changePassword'])->name('v1.users.me.password');       // 비밀번호 변겅

    Route::get('me/tenants', [UserController::class, 'tenants'])->name('v1.users.me.tenants.index');          // 내 테넌트 목록
    Route::patch('me/tenants/switch', [UserController::class, 'switchTenant'])->name('v1.users.me.tenants.switch');  // 활성 테넌트 전환

    // 사용자 초대 API
    Route::get('invitations', [UserInvitationController::class, 'index'])->name('v1.users.invitations.index');           // 초대 목록
    Route::post('invite', [UserInvitationController::class, 'invite'])->name('v1.users.invite');                          // 초대 발송
    Route::post('invitations/{token}/accept', [UserInvitationController::class, 'accept'])->name('v1.users.invitations.accept'); // 초대 수락
    Route::delete('invitations/{id}', [UserInvitationController::class, 'cancel'])->whereNumber('id')->name('v1.users.invitations.cancel'); // 초대 취소
    Route::post('invitations/{id}/resend', [UserInvitationController::class, 'resend'])->whereNumber('id')->name('v1.users.invitations.resend'); // 초대 재발송

    // 알림 설정 API (auth:sanctum 필수)
    Route::middleware('auth:sanctum')->group(function () {
        Route::get('me/notification-settings', [NotificationSettingController::class, 'index'])->name('v1.users.me.notification-settings.index'); // 알림 설정 조회
        Route::put('me/notification-settings', [NotificationSettingController::class, 'update'])->name('v1.users.me.notification-settings.update'); // 알림 설정 수정
        Route::put('me/notification-settings/bulk', [NotificationSettingController::class, 'bulkUpdate'])->name('v1.users.me.notification-settings.bulk'); // 알림 일괄 설정
    });
});

// User Role API
Route::prefix('users/{id}/roles')->group(function () {
    Route::get('/', [UserRoleController::class, 'index'])->name('v1.users.roles.index');   // list
    Route::post('/', [UserRoleController::class, 'grant'])->name('v1.users.roles.grant');   // grant
    Route::delete('/', [UserRoleController::class, 'revoke'])->name('v1.users.roles.revoke'); // revoke
    Route::put('/sync', [UserRoleController::class, 'sync'])->name('v1.users.roles.sync');     // sync
});

// Account API (계정 관리 - 탈퇴, 사용중지, 약관동의)
Route::prefix('account')->middleware('auth:sanctum')->group(function () {
    Route::post('withdraw', [AccountController::class, 'withdraw'])->name('v1.account.withdraw'); // 회원 탈퇴
    Route::post('suspend', [AccountController::class, 'suspend'])->name('v1.account.suspend'); // 사용 중지 (테넌트)
    Route::get('agreements', [AccountController::class, 'getAgreements'])->name('v1.account.agreements.index'); // 약관 동의 조회
    Route::put('agreements', [AccountController::class, 'updateAgreements'])->name('v1.account.agreements.update'); // 약관 동의 수정
});

// 회원 프로필(테넌트 기준)
Route::prefix('profiles')->group(function () {
    Route::get('', [TenantUserProfileController::class, 'index'])->name('v1.profiles.index');           // 프로필 목록(테넌트 기준)
    // /me 라우트는 /{userId} 와일드카드보다 먼저 정의해야 함
    // auth:sanctum 미들웨어로 Bearer 토큰 인증 필요
    Route::middleware('auth:sanctum')->group(function () {
        Route::get('/me', [TenantUserProfileController::class, 'me'])->name('v1.profiles.me');                 // 내 프로필 조회
        Route::patch('/me', [TenantUserProfileController::class, 'updateMe'])->name('v1.profiles.me.update');    // 내 프로필 수정
    });
    Route::get('/{userId}', [TenantUserProfileController::class, 'show'])->name('v1.profiles.show');             // 특정 사용자 프로필 조회
    Route::patch('/{userId}', [TenantUserProfileController::class, 'update'])->name('v1.profiles.update');         // 특정 사용자 프로필 수정(관리자)
});
