CREATE OR ALTER PROCEDURE dbo.SceneCharacter_Save
    @SceneCharacterID int = NULL, @SceneID int, @CharacterID int, @RoleInSceneTypeID int = NULL, @PresenceTypeID int = NULL,
    @LocationID int = NULL, @EntryLocationID int = NULL, @ExitLocationID int = NULL,
    @AppearanceNotes nvarchar(max) = NULL, @OutfitDescription nvarchar(max) = NULL, @PhysicalCondition nvarchar(max) = NULL,
    @EmotionalState nvarchar(max) = NULL, @KnowledgeNotes nvarchar(max) = NULL
AS
BEGIN
    SET NOCOUNT ON;

    IF @SceneCharacterID IS NULL OR @SceneCharacterID = 0
    BEGIN
        SELECT @SceneCharacterID = SceneCharacterID
        FROM dbo.SceneCharacters
        WHERE SceneID = @SceneID AND CharacterID = @CharacterID;
    END

    IF @SceneCharacterID IS NULL OR @SceneCharacterID = 0
    BEGIN
        INSERT dbo.SceneCharacters (SceneID, CharacterID, RoleInSceneTypeID, PresenceTypeID, LocationID, EntryLocationID, ExitLocationID,
            AppearanceNotes, OutfitDescription, PhysicalCondition, EmotionalState, KnowledgeNotes)
        VALUES (@SceneID, @CharacterID, @RoleInSceneTypeID, @PresenceTypeID, @LocationID, @EntryLocationID, @ExitLocationID,
            @AppearanceNotes, @OutfitDescription, @PhysicalCondition, @EmotionalState, @KnowledgeNotes);

        SET @SceneCharacterID = CAST(SCOPE_IDENTITY() AS int);
    END
    ELSE
    BEGIN
        UPDATE dbo.SceneCharacters
        SET SceneID = @SceneID,
            CharacterID = @CharacterID,
            RoleInSceneTypeID = @RoleInSceneTypeID,
            PresenceTypeID = @PresenceTypeID,
            LocationID = @LocationID,
            EntryLocationID = @EntryLocationID,
            ExitLocationID = @ExitLocationID,
            AppearanceNotes = @AppearanceNotes,
            OutfitDescription = @OutfitDescription,
            PhysicalCondition = @PhysicalCondition,
            EmotionalState = @EmotionalState,
            KnowledgeNotes = @KnowledgeNotes,
            UpdatedDate = SYSUTCDATETIME()
        WHERE SceneCharacterID = @SceneCharacterID;
    END

    SELECT @SceneCharacterID;
END;
GO
