<?php
/**
 * Recording launch compiler contract.
 *
 * @package ScheduledChanges
 */

namespace ScheduledChanges\Recording;

use ScheduledChanges\Domain\Recording\RecordingSession;
use ScheduledChanges\Domain\Shared\NamedTimezone;

/**
 * Adapts a recording source into application-level launch-plan compilation.
 *
 * Implementations should keep provider-specific change mapping in the adapter
 * and delegate validation, provider requirement capture, plan creation, and
 * immutable version persistence to the application compilation boundary.
 */
interface RecordingLaunchCompilerContract {
	/**
	 * @param array<string,mixed> $diff Structured diff.
	 * @param string[]            $selected_change_ids Selected change IDs.
	 */
	public function compile(
		RecordingSession $session,
		array $diff,
		array $selected_change_ids,
		string $launch_name,
		string $launch_description,
		NamedTimezone $timezone,
		int $actor_id
	): RecordingFinalizationResult;
}
