<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\DeviceToken;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class FcmTokenController extends Controller
{
    public function store(Request $request): JsonResponse
    {
        $validated = $request->validate([
            'token' => ['required', 'string', 'max:512'],
            'platform' => ['nullable', 'string', 'max:32'],
        ]);

        $user = $request->user();
        $token = $validated['token'];

        DeviceToken::query()->updateOrCreate(
            ['token' => $token],
            [
                'user_id' => $user->id,
                'platform' => $validated['platform'] ?? $this->guessPlatform($request),
            ]
        );

        return response()->json(['message' => 'FCM token registered.']);
    }

    public function destroy(Request $request): JsonResponse
    {
        $validated = $request->validate([
            'token' => ['nullable', 'string', 'max:512'],
        ]);

        $query = DeviceToken::query()->where('user_id', $request->user()->id);

        if (! empty($validated['token'])) {
            $query->where('token', $validated['token']);
        }

        $query->delete();

        return response()->json(['message' => 'FCM token removed.']);
    }

    protected function guessPlatform(Request $request): ?string
    {
        $ua = strtolower((string) $request->userAgent());
        if (str_contains($ua, 'android')) {
            return 'android';
        }
        if (str_contains($ua, 'iphone') || str_contains($ua, 'ipad') || str_contains($ua, 'ios')) {
            return 'ios';
        }

        return null;
    }
}
