import 'package:freezed_annotation/freezed_annotation.dart';

part 'auth.freezed.dart';
part 'auth.g.dart';

@freezed
abstract class AppTokenPair with _$AppTokenPair {
  const factory AppTokenPair({
    required String accessToken,
    required String refreshToken,
  }) = _AppTokenPair;

  factory AppTokenPair.fromJson(Map<String, dynamic> json) =>
      _$AppTokenPairFromJson(json);
}

@freezed
abstract class SnAuthChallenge with _$SnAuthChallenge {
  const factory SnAuthChallenge({
    required String id,
    required DateTime expiredAt,
    required int stepRemain,
    required int stepTotal,
    required List<String> blacklistFactors,
    required List<String> audiences,
    required List<String> scopes,
    required String ipAddress,
    required String userAgent,
    required String? deviceId,
    required String? nonce,
    required DateTime createdAt,
    required DateTime updatedAt,
    required DateTime? deletedAt,
  }) = _SnAuthChallenge;

  factory SnAuthChallenge.fromJson(Map<String, dynamic> json) =>
      _$SnAuthChallengeFromJson(json);
}

@freezed
abstract class SnAuthFactor with _$SnAuthFactor {
  const factory SnAuthFactor({
    required String id,
    required int type,
    required DateTime createdAt,
    required DateTime updatedAt,
    required DateTime? deletedAt,
  }) = _SnAuthFactor;

  factory SnAuthFactor.fromJson(Map<String, dynamic> json) =>
      _$SnAuthFactorFromJson(json);
}