<?php

use App\Http\Controllers\Api\ResManApiController;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\PropertyController;
use App\Models\Property;
use App\Models\Floorplan;
use App\Models\SyncLog;
use Illuminate\Support\Facades\Route;

// --- Authentication Routes ---
Route::middleware('guest')->group(function () {
    Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login');
    Route::post('/login', [LoginController::class, 'login']);
});

Route::post('/logout', [LoginController::class, 'logout'])->name('logout')->middleware('auth');
Route::post('/change-password', [LoginController::class, 'changePassword'])->name('password.change')->middleware('auth');

// --- Protected API Routes (Backward Compatible & RESTful) ---
Route::middleware('auth')->group(function () {

    // Account Management
    Route::get('/accounts', [\App\Http\Controllers\ResmanAccountController::class, 'index'])->name('accounts.index');
    Route::post('/accounts', [\App\Http\Controllers\ResmanAccountController::class, 'store'])->name('accounts.store');
    Route::put('/accounts/{account}', [\App\Http\Controllers\ResmanAccountController::class, 'update'])->name('accounts.update');
    Route::delete('/accounts/{account}', [\App\Http\Controllers\ResmanAccountController::class, 'destroy'])->name('accounts.destroy');
    Route::post('/accounts/{account}/sync', [\App\Http\Controllers\ResmanAccountController::class, 'syncBatch'])->name('accounts.sync');

    // Property Management
    Route::post('/add-property', [PropertyController::class, 'store'])->name('property.add');
    Route::post('/property/{id}/toggle-status', [PropertyController::class, 'toggleStatus'])->name('property.toggle-status');

    // Dashboard
    Route::get('/dashboard', [PropertyController::class, 'dashboard'])->name('dashboard');
    Route::get('/dashboard/logs', [PropertyController::class, 'getLatestLogs'])->name('dashboard.logs');
    Route::get('/property/{id}/refresh', [PropertyController::class, 'refreshCard'])->name('property.refresh');

    Route::get('/properties-load-more', [PropertyController::class, 'loadMore'])->name('properties.load-more');
    Route::get('/sync-status/{id}', [PropertyController::class, 'status'])->name('property.sync-status');
    Route::delete('/property/{id}', [PropertyController::class, 'destroy'])->name('property.destroy');

    // Legacy and RESTful API (Protected by session for web)
    Route::match(['get', 'post'], '/api', [ResManApiController::class, 'handleLegacyAction']);
});

// --- API Routes (Protected by Bearer Token) ---
Route::middleware('api_token_auth')->prefix('api/v1')->group(function () {
    Route::get('/properties', [ResManApiController::class, 'listProperties']);
    Route::get('/properties/{id}', [ResManApiController::class, 'getProperty']);
    Route::get('/floorplans', [ResManApiController::class, 'getFloorplans']);
    Route::get('/units', [ResManApiController::class, 'getUnits']);
});

// --- Public Test Routes (Bypass Auth for Debugging) ---
Route::prefix('api/front')->group(function () {
    Route::get('/status', function() {
        return response()->json(['status' => 'OK', 'message' => 'API is reachable']);
    });
    Route::get('/floorplans', [ResManApiController::class, 'getFloorplans']);
});

// --- Public Routes ---
Route::get('/', function () {
    return redirect('/dashboard');
});

Route::get('/debug-property/{id}', function($id) {
    if (request()->query('sync')) {
        $resman = app(\App\Services\ResManService::class);
        $resman->syncProperty($id);
    }

    $property = \App\Models\Property::where('property_id', $id)->first();
    if (!$property) {
        return response()->json(['error' => 'Property not found in database', 'id' => $id]);
    }
    
    return response()->json([
        'property_name' => $property->name,
        'is_active' => $property->is_status,
        'floorplans_in_db' => $property->floorplans()->count(),
        'units_in_db' => $property->units()->count(),
        'last_sync' => $property->last_sync ? $property->last_sync->toDateTimeString() : 'Never',
        'recent_logs' => \App\Models\SyncLog::where('property_id', $id)->orderBy('created_at', 'desc')->take(5)->get(),
        'raw_entry' => $property->toArray()
    ]);
});
