<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $request->validate([
            'nik' => 'required',
            'password' => 'required|min:8'
        ]);

        $user = User::where('nik', $request->nik)->first();
        if (!$user) {
            return response()->json([
                'message' => 'Unauthorized'
            ], 401);
        }


        if (!Hash::check($request->password, $user->password)) {
            return response()->json([
                'message' => 'Unauthorized'
            ], 401);
        }

        $user->tokens()->delete();

        $token = $user->createToken('auth-token')->plainTextToken;

        return response()->json([
            'status' => 'active',
            'message' => 'Login successful',
            'token' => $token,
            'token_type' => 'Bearer',
            'user' => $user,
        ], 200);
    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'nik' => 'required|numeric|unique:users,nik',
            'name' => 'required|string|max:100',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|min:8',
            'no_wa' => 'required|string|max:20',
            'avatar' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'message' => $validator->errors()->first(),
            ], 422);
        }

        // Upload avatar jika ada
        $avatarPath = null;
        if ($request->hasFile('avatar')) {
            $avatarPath = $request->file('avatar')->store('avatars', 'public');
        }

        // Simpan user baru
        $user = User::create([
            'nik' => $request->nik,
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'no_wa' => $request->no_wa,
            'avatar' => $avatarPath,
            'role' => 'masyarakat',
        ]);

        return response()->json([
            'success' => true,
            'message' => 'Registrasi berhasil',
            'user' => $user,
        ], 201);
    }

    public function logout(Request $request)
    {
        $token = $request->user()->currentAccessToken();

        if ($token && $token instanceof \Laravel\Sanctum\PersonalAccessToken) {
            $token->delete();

            return response()->json([
                'message' => 'Logged out'
            ], 200);
        }

        return response()->json([
            'message' => 'No valid token found'
        ], 400);
    }

    public function checkSession(Request $request)
    {
        if ($request->user()) {
            return response()->json([
                'status' => 'active',
                'message' => 'Session is active',
            ], 200);
        } else {
            return response()->json([
                'status' => 'banned',
                'message' => 'Session has expired or is banned',
            ], 401);
        }
    }
}
