<?php

namespace App\Http\Controllers\Api\Auth;

use App\Http\Controllers\Controller;
use App\Http\Resources\UserResource;
use App\Models\ConsultantProfile;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;

class AuthController extends Controller
{
    public function register(Request $request)
    {
        $data = $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);

      
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);

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

        $user->load(['permissions', 'consultantProfile', 'company']);

        return response()->json([
            'token' => $token,
            'user' => new UserResource($user),
        ], 201);
    }

    public function login(Request $request)
    {
        $data = $request->validate([
            'email' => ['required', 'string', 'email'],
            'password' => ['required', 'string'],
        ]);

        $user = User::where('email', $data['email'])->first();

        if (! $user || ! Hash::check($data['password'], $user->password)) {
            throw ValidationException::withMessages([
                'email' => ['Girdiğiniz bilgiler kayıtlarımızla eşleşmiyor.'],
            ]);
        }

        // Firmaya bağlı danışman hesapları admin onayına tabidir: onaysız ya da
        // pasif hesap giriş yapamaz. (Kendiliğinden başvuranlar normal kullanıcıdır,
        // company_id'leri null olduğundan bu kapıya takılmaz.)
        $profile = $user->consultantProfile;
        if ($profile && $profile->company_id !== null) {
            if ($profile->application_status === ConsultantProfile::STATUS_PENDING) {
                throw ValidationException::withMessages([
                    'email' => ['Hesabınız yönetici onayı bekliyor. Onaylandığında giriş yapabilirsiniz.'],
                ]);
            }

            if ($profile->application_status === ConsultantProfile::STATUS_REJECTED) {
                throw ValidationException::withMessages([
                    'email' => ['Danışman hesabınız onaylanmadı. Detay için firmanızla iletişime geçin.'],
                ]);
            }

            if (! $profile->is_active) {
                throw ValidationException::withMessages([
                    'email' => ['Hesabınız pasif durumda. Firmanızla iletişime geçin.'],
                ]);
            }
        }

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

        $user->load(['permissions', 'consultantProfile', 'company']);

        return response()->json([
            'token' => $token,
            'user' => new UserResource($user),
        ]);
    }

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

        return response()->json([
            'message' => 'Çıkış yapıldı.',
        ]);
    }

    public function me(Request $request)
    {
        $user = $request->user()->load(['permissions', 'consultantProfile', 'company']);

        return response()->json([
            'user' => new UserResource($user),
        ]);
    }
}
