<?php

namespace App\Http\Controllers\Api\User;

use App\Http\Controllers\Controller;
use App\Services\UserService;
use App\Http\Requests\Api\User\UserOnboardRoleRequest;
use App\Http\Requests\Api\User\UserOnboardUsageRequest;
use App\Http\Requests\Api\User\UserAvatarRequest;
use App\Http\Requests\Api\User\UserChangeEmailRequest;
use App\Http\Requests\Api\User\UserChangePasswordRequest;
use App\Http\Requests\Api\User\UserRequest;
use App\Http\Resources\Users\User as UserResource;
use App\Support\Utils;

class UserController extends Controller
{
    private $userService;

    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function updateUserOnboardRole(UserOnboardRoleRequest $request)
    {
        $data = $request->validated();
        $this->userService->updateUserOnboardRole(auth()->user(), $data['id']);
        return response()->json(
            ['success' => true]
        );
    }

    public function updateUserOnboardUsages(UserOnboardUsageRequest $request)
    {
        $data = $request->validated();
        $onboardUsageIds = array_column($data, 'id');
        $this->userService->updateUserOnboardUsages(auth()->user(), $onboardUsageIds);
        return response()->json(
            ['success' => true]
        );
    }

    public function updateUserAvatar(UserAvatarRequest $request)
    {
        $user = auth()->user();
        $data = $request->validated();
        $this->userService->updateAvatar($user, $data['image']);
        return response()->json(
            ['avatar' => Utils::mediaUrl($user->avatar, 'thumb')]
        );
    }

    public function deleteUserAvatar($userUid)
    {
        $user = auth()->user();
        if ($user->uid !== $userUid) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }
        $this->userService->deleteAvatar($user);
        return response()->json(
            ['success' => true]
        );
    }

    public function updateUser(UserRequest $request)
    {
        $user = auth()->user();
        $data = $request->validated();
        $this->userService->updateUser($user, $data);
        return response()->json(
            new UserResource($user)
        );
    }

    public function updateEmail(UserChangeEmailRequest $request)
    {
        $user = auth()->user();
        $data = $request->validated();
        $this->userService->updateEmail($user, $data['email']);
        return response()->json(
            ['success' => true]
        );
    }

    public function updatePassword(UserChangePasswordRequest $request)
    {
        $user = auth()->user();
        $data = $request->validated();
        $this->userService->updatePassword($user, $data['newPassword']);
        return response()->json(
            ['success' => true]
        );
    }

    public function updateUserNotifications()
    {

    }
}
