namespace Meezi.API.Models.Auth;

public record SendOtpRequest(string Phone);

public record VerifyOtpRequest(string Phone, string Code, string? CafeId = null);

public record RefreshTokenRequest(string RefreshToken);

public record SwitchCafeRequest(string CafeId);

/// <summary>Step 1 of self-registration: send OTP to a new phone number.</summary>
public record RegisterRequest(string Phone, string CafeName);

/// <summary>Step 2 of self-registration: verify OTP and create the cafe account.</summary>
public record VerifyRegisterRequest(string Phone, string Code);

/// <summary>One café membership entry returned when user belongs to multiple cafés.</summary>
public record CafeMembershipDto(string CafeId, string CafeName, string Role, string PlanTier);

public record AuthTokenResponse(
    string AccessToken,
    string RefreshToken,
    DateTime ExpiresAt,
    string UserId,
    string CafeId,
    string Role,
    string PlanTier,
    string Language,
    string Actor = Meezi.Core.Constants.MeeziActorKinds.Merchant,
    string? BranchId = null,
    List<CafeMembershipDto>? Memberships = null);

public record SendOtpResponse(bool Sent, int ExpiresInSeconds);

/// <summary>Returned when a phone number belongs to multiple cafés and no CafeId was specified.</summary>
public record CafeChoicesResponse(List<CafeMembershipDto> Cafes);
