import 'package:comwell_key_app/domain/models/app_error.dart';
import 'package:comwell_key_app/presentation/screens/pregistration/prereg_request_model.dart' show IdType;
import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
import 'package:country_code_picker/country_code_picker.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:payment_plugin/domain/models/stored_payment_method.dart';

import '../../../../domain/models/user.dart';

part '../../../../.generated/presentation/screens/pregistration/cubit/preregistration_state.freezed.dart';

@freezed
abstract class PreregistrationState with _$PreregistrationState {
  const factory PreregistrationState({
    @Default(false) bool isLoading,
    @Default(false) bool selected,
    @Default([]) List<AddOnUpgrade> addOnUpgrades,
    @Default([]) List<RoomUpgrade> availableRoomUpgrades,
    @Default('') String selectedRoomUpgrade,
    @Default(false) bool missingInformation,
    @Default(0) int extrasTotalPrice,
    @Default(false) bool termsAndConditionsAccepted,
    @Default(false) bool forceUpdate,
    @Default(null) User? user,
    @Default(null) CountryCode? countryCode,
    @Default('') String selectedCountry,
    @Default('') String selectedNationality,
    @Default(null) String? phoneNumber,
    @Default(false) bool isPhoneNumberValid,
    @Default(false) bool isFirstNameValid,
    @Default(false) bool isLastNameValid,
    @Default(false) bool isAddressValid,
    @Default(false) bool isPostalCodeValid,
    @Default(false) bool isCityValid,
    @Default(false) bool isBirthDateValid,
    @Default(IdType.driverLicense) IdType selectedDocumentType,
    @Default(null) StoredPaymentMethod? selectedPaymentMethod,
    @Default(null) TimeOfDay? servingTime,
    @Default(AppError.none) AppError error,
  }) = _PreregistrationState;
}