using System;

namespace GmRelay.Shared.Features.Sessions.CreateSession.Wizard;

public sealed class WizardDraft
{
    public Guid Id { get; set; }

    /// <summary>
    /// Stable string id of the chat/guild/channel this draft lives in.
    /// Stored as <c>TEXT</c> to fit both Telegram's <c>long</c> chat ids
    /// and Discord's snowflakes.
    /// </summary>
    public string ChatId { get; set; } = string.Empty;

    /// <summary>
    /// Optional thread/topic id within the chat. Telegram's
    /// <c>message_thread_id</c>, Discord's thread snowflake, <c>null</c>
    /// when the chat has no sub-thread concept.
    /// </summary>
    public string? MessageThreadId { get; set; }

    /// <summary>
    /// Platform-specific user id of the wizard owner. Telegram uses
    /// <c>long</c>, Discord uses snowflakes — both fit in a string.
    /// </summary>
    public string OwnerId { get; set; } = string.Empty;

    /// <summary>
    /// Which messenger platform owns this draft. Defaults to
    /// <c>"Telegram"</c> for backward compatibility with pre-V032 rows.
    /// </summary>
    public string Platform { get; set; } = "Telegram";

    public string Step { get; set; } = string.Empty;

    public string PayloadJson { get; set; } = "{}";

    /// <summary>
    /// Id of the message that the wizard last edited. Stored as
    /// <c>TEXT</c> to fit both Telegram's <c>int32</c> ids and Discord's
    /// 64-bit snowflakes.
    /// </summary>
    public string? DraftMessageId { get; set; }

    public DateTime CreatedAt { get; set; }

    public DateTime UpdatedAt { get; set; }

    public DateTime ExpiresAt { get; set; }
}
