<?php

declare(strict_types=1);

namespace ROITheme\Shared\Application\UseCases\SaveComponentSettings;

use ROITheme\Shared\Domain\Contracts\ComponentSettingsRepositoryInterface;

/**
 * Caso de uso para guardar las configuraciones de un componente
 *
 * Application Layer - Orquesta la lógica de negocio
 *
 * @package ROITheme\Shared\Application\UseCases\SaveComponentSettings
 */
final class SaveComponentSettingsUseCase
{
    public function __construct(
        private ComponentSettingsRepositoryInterface $repository
    ) {
    }

    /**
     * Ejecuta el caso de uso
     *
     * @param string $componentName Nombre del componente
     * @param array<string, array<string, mixed>> $settings Configuraciones a guardar
     * @return int Número de campos actualizados
     */
    public function execute(string $componentName, array $settings): int
    {
        // Validar entrada
        if (empty($componentName) || empty($settings)) {
            return 0;
        }

        // Guardar configuraciones usando el repositorio
        $updated = $this->repository->saveComponentSettings($componentName, $settings);

        return $updated;
    }
}
