// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark

part of 'monetization_state.dart';

// **************************************************************************
// FreezedGenerator
// **************************************************************************

T _$identity<T>(T value) => value;

final _privateConstructorUsedError = UnsupportedError(
  'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
);

MonetizationState _$MonetizationStateFromJson(Map<String, dynamic> json) {
  return _MonetizationState.fromJson(json);
}

/// @nodoc
mixin _$MonetizationState {
  /// IAP 광고 제거 구매 여부
  bool get adRemovalPurchased => throw _privateConstructorUsedError;

  /// 캐릭터 생성 굴리기 남은 횟수 (0-5)
  int get rollsRemaining => throw _privateConstructorUsedError;

  /// 되돌리기 남은 횟수
  int get undoRemaining => throw _privateConstructorUsedError;

  /// 되돌리기용 스탯 히스토리 (JSON 변환 커스텀)
  @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
  List<Stats>? get rollHistory => throw _privateConstructorUsedError;

  /// 자동부활 버프 종료 시점 (elapsedMs 기준)
  int? get autoReviveEndMs => throw _privateConstructorUsedError;

  /// 5배속 버프 종료 시점 (elapsedMs 기준)
  int? get speedBoostEndMs => throw _privateConstructorUsedError;

  /// 마지막 플레이 시각 (복귀 보상 계산용)
  @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
  DateTime? get lastPlayTime => throw _privateConstructorUsedError;

  /// 미개봉 보물 상자 개수
  int get pendingChests => throw _privateConstructorUsedError;

  /// 행운의 부적 버프 종료 시점 (elapsedMs 기준)
  int? get luckyCharmEndMs => throw _privateConstructorUsedError;

  /// Serializes this MonetizationState to a JSON map.
  Map<String, dynamic> toJson() => throw _privateConstructorUsedError;

  /// Create a copy of MonetizationState
  /// with the given fields replaced by the non-null parameter values.
  @JsonKey(includeFromJson: false, includeToJson: false)
  $MonetizationStateCopyWith<MonetizationState> get copyWith =>
      throw _privateConstructorUsedError;
}

/// @nodoc
abstract class $MonetizationStateCopyWith<$Res> {
  factory $MonetizationStateCopyWith(
    MonetizationState value,
    $Res Function(MonetizationState) then,
  ) = _$MonetizationStateCopyWithImpl<$Res, MonetizationState>;
  @useResult
  $Res call({
    bool adRemovalPurchased,
    int rollsRemaining,
    int undoRemaining,
    @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
    List<Stats>? rollHistory,
    int? autoReviveEndMs,
    int? speedBoostEndMs,
    @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
    DateTime? lastPlayTime,
    int pendingChests,
    int? luckyCharmEndMs,
  });
}

/// @nodoc
class _$MonetizationStateCopyWithImpl<$Res, $Val extends MonetizationState>
    implements $MonetizationStateCopyWith<$Res> {
  _$MonetizationStateCopyWithImpl(this._value, this._then);

  // ignore: unused_field
  final $Val _value;
  // ignore: unused_field
  final $Res Function($Val) _then;

  /// Create a copy of MonetizationState
  /// with the given fields replaced by the non-null parameter values.
  @pragma('vm:prefer-inline')
  @override
  $Res call({
    Object? adRemovalPurchased = null,
    Object? rollsRemaining = null,
    Object? undoRemaining = null,
    Object? rollHistory = freezed,
    Object? autoReviveEndMs = freezed,
    Object? speedBoostEndMs = freezed,
    Object? lastPlayTime = freezed,
    Object? pendingChests = null,
    Object? luckyCharmEndMs = freezed,
  }) {
    return _then(
      _value.copyWith(
            adRemovalPurchased: null == adRemovalPurchased
                ? _value.adRemovalPurchased
                : adRemovalPurchased // ignore: cast_nullable_to_non_nullable
                      as bool,
            rollsRemaining: null == rollsRemaining
                ? _value.rollsRemaining
                : rollsRemaining // ignore: cast_nullable_to_non_nullable
                      as int,
            undoRemaining: null == undoRemaining
                ? _value.undoRemaining
                : undoRemaining // ignore: cast_nullable_to_non_nullable
                      as int,
            rollHistory: freezed == rollHistory
                ? _value.rollHistory
                : rollHistory // ignore: cast_nullable_to_non_nullable
                      as List<Stats>?,
            autoReviveEndMs: freezed == autoReviveEndMs
                ? _value.autoReviveEndMs
                : autoReviveEndMs // ignore: cast_nullable_to_non_nullable
                      as int?,
            speedBoostEndMs: freezed == speedBoostEndMs
                ? _value.speedBoostEndMs
                : speedBoostEndMs // ignore: cast_nullable_to_non_nullable
                      as int?,
            lastPlayTime: freezed == lastPlayTime
                ? _value.lastPlayTime
                : lastPlayTime // ignore: cast_nullable_to_non_nullable
                      as DateTime?,
            pendingChests: null == pendingChests
                ? _value.pendingChests
                : pendingChests // ignore: cast_nullable_to_non_nullable
                      as int,
            luckyCharmEndMs: freezed == luckyCharmEndMs
                ? _value.luckyCharmEndMs
                : luckyCharmEndMs // ignore: cast_nullable_to_non_nullable
                      as int?,
          )
          as $Val,
    );
  }
}

/// @nodoc
abstract class _$$MonetizationStateImplCopyWith<$Res>
    implements $MonetizationStateCopyWith<$Res> {
  factory _$$MonetizationStateImplCopyWith(
    _$MonetizationStateImpl value,
    $Res Function(_$MonetizationStateImpl) then,
  ) = __$$MonetizationStateImplCopyWithImpl<$Res>;
  @override
  @useResult
  $Res call({
    bool adRemovalPurchased,
    int rollsRemaining,
    int undoRemaining,
    @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
    List<Stats>? rollHistory,
    int? autoReviveEndMs,
    int? speedBoostEndMs,
    @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
    DateTime? lastPlayTime,
    int pendingChests,
    int? luckyCharmEndMs,
  });
}

/// @nodoc
class __$$MonetizationStateImplCopyWithImpl<$Res>
    extends _$MonetizationStateCopyWithImpl<$Res, _$MonetizationStateImpl>
    implements _$$MonetizationStateImplCopyWith<$Res> {
  __$$MonetizationStateImplCopyWithImpl(
    _$MonetizationStateImpl _value,
    $Res Function(_$MonetizationStateImpl) _then,
  ) : super(_value, _then);

  /// Create a copy of MonetizationState
  /// with the given fields replaced by the non-null parameter values.
  @pragma('vm:prefer-inline')
  @override
  $Res call({
    Object? adRemovalPurchased = null,
    Object? rollsRemaining = null,
    Object? undoRemaining = null,
    Object? rollHistory = freezed,
    Object? autoReviveEndMs = freezed,
    Object? speedBoostEndMs = freezed,
    Object? lastPlayTime = freezed,
    Object? pendingChests = null,
    Object? luckyCharmEndMs = freezed,
  }) {
    return _then(
      _$MonetizationStateImpl(
        adRemovalPurchased: null == adRemovalPurchased
            ? _value.adRemovalPurchased
            : adRemovalPurchased // ignore: cast_nullable_to_non_nullable
                  as bool,
        rollsRemaining: null == rollsRemaining
            ? _value.rollsRemaining
            : rollsRemaining // ignore: cast_nullable_to_non_nullable
                  as int,
        undoRemaining: null == undoRemaining
            ? _value.undoRemaining
            : undoRemaining // ignore: cast_nullable_to_non_nullable
                  as int,
        rollHistory: freezed == rollHistory
            ? _value._rollHistory
            : rollHistory // ignore: cast_nullable_to_non_nullable
                  as List<Stats>?,
        autoReviveEndMs: freezed == autoReviveEndMs
            ? _value.autoReviveEndMs
            : autoReviveEndMs // ignore: cast_nullable_to_non_nullable
                  as int?,
        speedBoostEndMs: freezed == speedBoostEndMs
            ? _value.speedBoostEndMs
            : speedBoostEndMs // ignore: cast_nullable_to_non_nullable
                  as int?,
        lastPlayTime: freezed == lastPlayTime
            ? _value.lastPlayTime
            : lastPlayTime // ignore: cast_nullable_to_non_nullable
                  as DateTime?,
        pendingChests: null == pendingChests
            ? _value.pendingChests
            : pendingChests // ignore: cast_nullable_to_non_nullable
                  as int,
        luckyCharmEndMs: freezed == luckyCharmEndMs
            ? _value.luckyCharmEndMs
            : luckyCharmEndMs // ignore: cast_nullable_to_non_nullable
                  as int?,
      ),
    );
  }
}

/// @nodoc
@JsonSerializable()
class _$MonetizationStateImpl extends _MonetizationState {
  const _$MonetizationStateImpl({
    this.adRemovalPurchased = false,
    this.rollsRemaining = 5,
    this.undoRemaining = 1,
    @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
    final List<Stats>? rollHistory,
    this.autoReviveEndMs,
    this.speedBoostEndMs,
    @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
    this.lastPlayTime,
    this.pendingChests = 0,
    this.luckyCharmEndMs,
  }) : _rollHistory = rollHistory,
       super._();

  factory _$MonetizationStateImpl.fromJson(Map<String, dynamic> json) =>
      _$$MonetizationStateImplFromJson(json);

  /// IAP 광고 제거 구매 여부
  @override
  @JsonKey()
  final bool adRemovalPurchased;

  /// 캐릭터 생성 굴리기 남은 횟수 (0-5)
  @override
  @JsonKey()
  final int rollsRemaining;

  /// 되돌리기 남은 횟수
  @override
  @JsonKey()
  final int undoRemaining;

  /// 되돌리기용 스탯 히스토리 (JSON 변환 커스텀)
  final List<Stats>? _rollHistory;

  /// 되돌리기용 스탯 히스토리 (JSON 변환 커스텀)
  @override
  @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
  List<Stats>? get rollHistory {
    final value = _rollHistory;
    if (value == null) return null;
    if (_rollHistory is EqualUnmodifiableListView) return _rollHistory;
    // ignore: implicit_dynamic_type
    return EqualUnmodifiableListView(value);
  }

  /// 자동부활 버프 종료 시점 (elapsedMs 기준)
  @override
  final int? autoReviveEndMs;

  /// 5배속 버프 종료 시점 (elapsedMs 기준)
  @override
  final int? speedBoostEndMs;

  /// 마지막 플레이 시각 (복귀 보상 계산용)
  @override
  @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
  final DateTime? lastPlayTime;

  /// 미개봉 보물 상자 개수
  @override
  @JsonKey()
  final int pendingChests;

  /// 행운의 부적 버프 종료 시점 (elapsedMs 기준)
  @override
  final int? luckyCharmEndMs;

  @override
  String toString() {
    return 'MonetizationState(adRemovalPurchased: $adRemovalPurchased, rollsRemaining: $rollsRemaining, undoRemaining: $undoRemaining, rollHistory: $rollHistory, autoReviveEndMs: $autoReviveEndMs, speedBoostEndMs: $speedBoostEndMs, lastPlayTime: $lastPlayTime, pendingChests: $pendingChests, luckyCharmEndMs: $luckyCharmEndMs)';
  }

  @override
  bool operator ==(Object other) {
    return identical(this, other) ||
        (other.runtimeType == runtimeType &&
            other is _$MonetizationStateImpl &&
            (identical(other.adRemovalPurchased, adRemovalPurchased) ||
                other.adRemovalPurchased == adRemovalPurchased) &&
            (identical(other.rollsRemaining, rollsRemaining) ||
                other.rollsRemaining == rollsRemaining) &&
            (identical(other.undoRemaining, undoRemaining) ||
                other.undoRemaining == undoRemaining) &&
            const DeepCollectionEquality().equals(
              other._rollHistory,
              _rollHistory,
            ) &&
            (identical(other.autoReviveEndMs, autoReviveEndMs) ||
                other.autoReviveEndMs == autoReviveEndMs) &&
            (identical(other.speedBoostEndMs, speedBoostEndMs) ||
                other.speedBoostEndMs == speedBoostEndMs) &&
            (identical(other.lastPlayTime, lastPlayTime) ||
                other.lastPlayTime == lastPlayTime) &&
            (identical(other.pendingChests, pendingChests) ||
                other.pendingChests == pendingChests) &&
            (identical(other.luckyCharmEndMs, luckyCharmEndMs) ||
                other.luckyCharmEndMs == luckyCharmEndMs));
  }

  @JsonKey(includeFromJson: false, includeToJson: false)
  @override
  int get hashCode => Object.hash(
    runtimeType,
    adRemovalPurchased,
    rollsRemaining,
    undoRemaining,
    const DeepCollectionEquality().hash(_rollHistory),
    autoReviveEndMs,
    speedBoostEndMs,
    lastPlayTime,
    pendingChests,
    luckyCharmEndMs,
  );

  /// Create a copy of MonetizationState
  /// with the given fields replaced by the non-null parameter values.
  @JsonKey(includeFromJson: false, includeToJson: false)
  @override
  @pragma('vm:prefer-inline')
  _$$MonetizationStateImplCopyWith<_$MonetizationStateImpl> get copyWith =>
      __$$MonetizationStateImplCopyWithImpl<_$MonetizationStateImpl>(
        this,
        _$identity,
      );

  @override
  Map<String, dynamic> toJson() {
    return _$$MonetizationStateImplToJson(this);
  }
}

abstract class _MonetizationState extends MonetizationState {
  const factory _MonetizationState({
    final bool adRemovalPurchased,
    final int rollsRemaining,
    final int undoRemaining,
    @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
    final List<Stats>? rollHistory,
    final int? autoReviveEndMs,
    final int? speedBoostEndMs,
    @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
    final DateTime? lastPlayTime,
    final int pendingChests,
    final int? luckyCharmEndMs,
  }) = _$MonetizationStateImpl;
  const _MonetizationState._() : super._();

  factory _MonetizationState.fromJson(Map<String, dynamic> json) =
      _$MonetizationStateImpl.fromJson;

  /// IAP 광고 제거 구매 여부
  @override
  bool get adRemovalPurchased;

  /// 캐릭터 생성 굴리기 남은 횟수 (0-5)
  @override
  int get rollsRemaining;

  /// 되돌리기 남은 횟수
  @override
  int get undoRemaining;

  /// 되돌리기용 스탯 히스토리 (JSON 변환 커스텀)
  @override
  @JsonKey(fromJson: _statsListFromJson, toJson: _statsListToJson)
  List<Stats>? get rollHistory;

  /// 자동부활 버프 종료 시점 (elapsedMs 기준)
  @override
  int? get autoReviveEndMs;

  /// 5배속 버프 종료 시점 (elapsedMs 기준)
  @override
  int? get speedBoostEndMs;

  /// 마지막 플레이 시각 (복귀 보상 계산용)
  @override
  @JsonKey(fromJson: _dateTimeFromJson, toJson: _dateTimeToJson)
  DateTime? get lastPlayTime;

  /// 미개봉 보물 상자 개수
  @override
  int get pendingChests;

  /// 행운의 부적 버프 종료 시점 (elapsedMs 기준)
  @override
  int? get luckyCharmEndMs;

  /// Create a copy of MonetizationState
  /// with the given fields replaced by the non-null parameter values.
  @override
  @JsonKey(includeFromJson: false, includeToJson: false)
  _$$MonetizationStateImplCopyWith<_$MonetizationStateImpl> get copyWith =>
      throw _privateConstructorUsedError;
}
