namespace FlatRender.StudioSvc.Models.Requests;

public record CreateSavedProjectRequest(
    Guid OriginalProjectId,
    string? Name,
    Guid? PresetStoryId,
    bool CopyDefaultValues = true
);

public record UpdateSavedProjectRequest(
    string? Name,
    string? Image,
    string? Type,
    Guid? MusicFileId,
    Guid? MusicTrackId,
    decimal? MusicVolume,
    Guid? VoiceoverFileId,
    decimal? VoiceoverVolume,
    bool? VoiceoverRecordedInBrowser,
    decimal? SfxVolume,
    bool? SfxEnabled,
    string? AudioVisualizerMusicUrl,
    decimal? AudioVisualizerDurationSec,
    bool? ManualColorPicker,
    Guid? SelectedPresetStoryId,
    string? LastEditStep,
    string? EditState
);

public record SaveSceneRequest(
    Guid? OriginalSceneId,
    string Key,
    string? Title,
    string? Image,
    string? SceneColorSvg,
    string SceneType,
    int Sort,
    decimal SceneLengthSec,
    decimal? MinDurationSec,
    decimal? MaxDurationSec,
    decimal OverlapAtEndSec,
    bool CanHandleDuration,
    bool ManualColorSelection,
    List<SaveSceneContentRequest> Contents,
    List<SaveSceneColorRequest> Colors,
    List<SaveSharedColorRequest> SharedColors,
    List<SaveSharedLayerRequest> SharedLayers
);

public record SaveSceneContentRequest(
    string Key,
    string? Title,
    string Type,
    string? Value,
    Guid? ValueFileId,
    string? InsertedFileType,
    string? FontFace,
    string? FontFaceName,
    int? FontSize,
    int? DefaultFontSize,
    string? DefaultFontFace,
    string? Justify,
    int PositionInContainer,
    int DirectionLayerValue,
    bool IsTextBox,
    string? AiInputType,
    int? SelectedDp,
    string? RepeaterItemKey,
    int? RepeaterIndex,
    bool IsFocused,
    string? MappedList,
    string? Thumbnail,
    int Sort
);

public record SaveSceneColorRequest(
    string ElementKey,
    string? Title,
    string? Icon,
    string AttrValue,
    string Value,
    bool IsSelected,
    int Sort
);

public record SaveSharedColorRequest(
    string ElementKey,
    string? Title,
    string? Icon,
    string AttrValue,
    string Value,
    bool IsSelected,
    int Sort
);

public record SaveSharedLayerRequest(
    string Key,
    string? Title,
    string Type,
    string? Value,
    Guid? ValueFileId,
    string? FontFace,
    string? FontFaceName,
    int? FontSize,
    string? Justify,
    int PositionInContainer,
    int DirectionLayerValue,
    bool IsTextBox,
    string? AiInputType,
    string? MappedList,
    string? Thumbnail,
    int? Width,
    int? Height,
    bool IsFocused,
    bool IsFontChangeable,
    bool IsFontSizeChangeable,
    int Sort
);

public record SavedProjectListRequest(
    int Page = 1,
    int PageSize = 20,
    string? Q = null,
    string? Type = null
);

/// <summary>Lightweight update of individual scene-input values — the studio editor
/// writes the user's edits here (by content key) so the render binder picks them up.</summary>
public record UpdateContentsRequest(List<UpdateContentItem> Items);
public record UpdateContentItem(string Key, string? Value, Guid? ValueFileId);
