<?php

declare(strict_types=1);

namespace App\Service\Sync;

use App\DTO\SyncConfirmation;
use App\DTO\SyncExecutionResult;
use App\DTO\SyncPreviewResult;
use App\Entity\ModelType;

interface SyncStrategyInterface
{
    public function supports(ModelType $modelType): bool;

    /**
     * Compute diff between proposed structure and current items' slots.
     * Does NOT persist anything.
     */
    public function preview(ModelType $modelType, array $newStructure): SyncPreviewResult;

    /**
     * Apply sync: compare current skeleton requirements (already persisted)
     * with items' slots and add/remove as needed.
     */
    public function execute(ModelType $modelType, SyncConfirmation $confirmation): SyncExecutionResult;
}
