<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\MemberUsageSession;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class MemberUsageController extends Controller
{
    public function start(Request $request)
    {
        $session = MemberUsageSession::create([
            'uuid' => (string) Str::uuid(),
            'user_id' => $request->user()->id,
            'started_at' => now()->tz('Europe/Berlin'),
            'last_seen_at' => now()->tz('Europe/Berlin'),
        ]);

        return response()->json(['sessionId' => $session->uuid], 201);
    }

    public function heartbeat(Request $request)
    {
        $data = $request->validate([
            'sessionId' => ['required', 'uuid'],
            'activeSeconds' => ['required', 'integer', 'min:0', 'max:60'],
        ]);

        $updatedSession = DB::transaction(function () use ($request, $data) {
            $session = MemberUsageSession::where('uuid', $data['sessionId'])
                ->where('user_id', $request->user()->id)
                ->lockForUpdate()
                ->firstOrFail();

            $session->active_seconds += $data['activeSeconds'];
            $session->last_seen_at = now()->tz('Europe/Berlin');
            $session->save();

            return $session;
        });

        return response()->json([
            'activeSeconds' => $updatedSession->active_seconds,
        ]);
    }
}
