namespace TakeoutSaaS.Domain.Tenants.Events;

/// <summary>
/// 租户创建完成事件。
/// </summary>
/// <remarks>
/// 当租户及其相关数据（订阅、认证资料等）创建成功后发布此事件。
/// 消费者可据此自动创建关联的商户和证照记录。
/// </remarks>
public sealed record TenantCreatedEvent
{
    // 1. 租户基本信息

    /// <summary>
    /// 租户 ID。
    /// </summary>
    public required long TenantId { get; init; }

    /// <summary>
    /// 租户编码。
    /// </summary>
    public required string Code { get; init; }

    /// <summary>
    /// 租户名称。
    /// </summary>
    public required string Name { get; init; }

    /// <summary>
    /// 租户简称。
    /// </summary>
    public string? ShortName { get; init; }

    /// <summary>
    /// 法人/公司主体名称。
    /// </summary>
    public string? LegalEntityName { get; init; }

    /// <summary>
    /// LOGO 图片地址。
    /// </summary>
    public string? LogoUrl { get; init; }

    // 2. 地址信息

    /// <summary>
    /// 省份。
    /// </summary>
    public string? Province { get; init; }

    /// <summary>
    /// 城市。
    /// </summary>
    public string? City { get; init; }

    /// <summary>
    /// 区县。
    /// </summary>
    public string? District { get; init; }

    /// <summary>
    /// 详细地址。
    /// </summary>
    public string? Address { get; init; }

    // 3. 联系信息

    /// <summary>
    /// 联系人姓名。
    /// </summary>
    public string? ContactName { get; init; }

    /// <summary>
    /// 联系人电话。
    /// </summary>
    public string? ContactPhone { get; init; }

    /// <summary>
    /// 联系人邮箱。
    /// </summary>
    public string? ContactEmail { get; init; }

    // 4. 认证资料（用于创建商户证照）

    /// <summary>
    /// 营业执照号。
    /// </summary>
    public string? BusinessLicenseNumber { get; init; }

    /// <summary>
    /// 营业执照图片 URL。
    /// </summary>
    public string? BusinessLicenseUrl { get; init; }

    /// <summary>
    /// 法人姓名。
    /// </summary>
    public string? LegalPersonName { get; init; }

    /// <summary>
    /// 法人身份证号。
    /// </summary>
    public string? LegalPersonIdNumber { get; init; }

    /// <summary>
    /// 法人身份证正面 URL。
    /// </summary>
    public string? LegalPersonIdFrontUrl { get; init; }

    /// <summary>
    /// 法人身份证背面 URL。
    /// </summary>
    public string? LegalPersonIdBackUrl { get; init; }

    // 5. 管理员信息

    /// <summary>
    /// 管理员用户 ID。
    /// </summary>
    public long AdminUserId { get; init; }

    // 6. 审核状态

    /// <summary>
    /// 是否跳过审核（直接激活）。
    /// </summary>
    public bool IsSkipApproval { get; init; }

    /// <summary>
    /// 事件发生时间（UTC）。
    /// </summary>
    public DateTime CreatedAt { get; init; } = DateTime.UtcNow;
}
