<?php

namespace App\Services;

use App\Models\AdminUser;
use App\Repositories\Eloquent\AdminUserManagementRepository;

class AdminUserManagementService
{
    public function __construct(
        private AdminUserManagementRepository $repository,
        private AdminCredentialService $credentialService,
    ) {}

    public function index(array $filters = []): array
    {
        return ['admins' => $this->repository->paginate($filters), 'stats' => $this->repository->stats()];
    }

    public function create(array $data): AdminUser
    {
        $temporaryPassword = $this->credentialService->temporaryPassword();
        $data['password'] = $temporaryPassword;
        $adminUser = $this->repository->create($data);
        try {
            $this->credentialService->sendTemporaryPassword($adminUser, $temporaryPassword);
        } catch (\Throwable $exception) {
            $adminUser->delete();
            throw $exception;
        }

        return $adminUser;
    }

    public function update(AdminUser $adminUser, array $data): AdminUser
    {
        return $this->repository->update($adminUser, $data);
    }

    public function activeSystemAdminsExcept(AdminUser $adminUser): int
    {
        return $this->repository->activeSystemAdminsExcept($adminUser);
    }
}
