<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Hash;
use DB;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->only('username', 'password');

        if (!Auth::attempt($credentials)) {
            return response()->json([
                'status' => 'error',
                'message' => 'Invalid credentials, check Username and Password',
            ], 200);
        }

        $user = Auth::user();
        $token = $user->createToken($user->username)->plainTextToken;

        return response()->json([
            'status' => 'success',
            'user' => $user,
            'authorisation' => [
                'token' => $token,
                'type' => 'bearer',
            ],
        ]);
    }

    public function logout(Request $request){
        $user = Auth::user();
        if (!is_null($user)) {
            $user->currentAccessToken()->delete();
        }
    }
    public function changePass(Request $request){
        $user = Auth::user();
        if(is_null($user)){
            return response()->json(['error' => 'User tidak terdaftar'], 500);
        }

        $request->validate([
            'old_password' => 'required|string',
            'new_password' => 'required|string',
            'new_password_2' => 'required|string',
        ]);
        DB::beginTransaction();
        try{
            $us = User::find($user->id);
            if(!Hash::check($request->old_password, $us->password)){
                return response()->json(['error' => 'Invalid Old Password'], 500);
            }
            $us->password = Hash::make($request->new_password);
            $us->save();
            DB::commit();
        } catch(\Exception $e){
            DB::rollback();
            Log::error('Error ubah password', [
                'error' => $e->getMessage(),
                'trace' => $e->getTraceAsString()
            ]);
            return response()->json(['error' => 'Server error '.$e->getMessage()], 500);
        }
    }
}
