namespace CMSMicroservice.Application.Common.Interfaces;

/// <summary>
/// سرویس ارتباط با API چتیکا برای ساخت حساب کاربری
/// </summary>
public interface IChatikaApiService
{
    /// <summary>
    /// ایجاد حساب کاربری در چتیکا
    /// </summary>
    /// <param name="mobileNumber">شماره موبایل کاربر</param>
    /// <param name="fullName">نام کامل کاربر</param>
    /// <param name="cancellationToken">Cancellation token</param>
    /// <returns>نتیجه ایجاد حساب</returns>
    Task<ChatikaAccountResult> CreateAccountAsync(
        string mobileNumber, 
        string fullName,
        CancellationToken cancellationToken = default);
}

/// <summary>
/// نتیجه ایجاد حساب در چتیکا
/// </summary>
public class ChatikaAccountResult
{
    /// <summary>
    /// موفقیت عملیات
    /// </summary>
    public bool IsSuccess { get; set; }

    /// <summary>
    /// پیام خطا در صورت عدم موفقیت
    /// </summary>
    public string? ErrorMessage { get; set; }

    /// <summary>
    /// شناسه کاربر در چتیکا
    /// </summary>
    public string? ChatikaUserId { get; set; }

    /// <summary>
    /// URL دسترسی به چتیکا
    /// </summary>
    public string? AccessUrl { get; set; }

    /// <summary>
    /// ایجاد نتیجه موفق
    /// </summary>
    public static ChatikaAccountResult Success(string? chatikaUserId = null, string? accessUrl = null) => new()
    {
        IsSuccess = true,
        ChatikaUserId = chatikaUserId,
        AccessUrl = accessUrl
    };

    /// <summary>
    /// ایجاد نتیجه ناموفق
    /// </summary>
    public static ChatikaAccountResult Failure(string errorMessage) => new()
    {
        IsSuccess = false,
        ErrorMessage = errorMessage
    };
}
