// Copyright (C) 2022 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

import 'package:example_router/bootstrap.dart';
import 'package:example_router/firebase_options.dart';
import 'package:get_it/get_it.dart';
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart';

final getIt = GetIt.I;

abstract class GetItInitializer {
  static Future<void> init() async {
    getIt
      ..registerLazySingleton<AuthenticationRemoteDataSource>(
        MockSettings.isEnable()
            ? () => AuthenticationMockDataSourceImpl(registeredAccounts: [
                  Pair(
                    AccountModel(
                      uid: '1',
                      emailVerified: true,
                      isAnonymous: false,
                      providerId: 'wyatt',
                      email: 'toto@test.fr',
                    ),
                    'toto1234',
                  ),
                  Pair(
                    AccountModel(
                      uid: '2',
                      emailVerified: false,
                      isAnonymous: false,
                      providerId: 'wyatt',
                      email: 'tata@test.fr',
                    ),
                    'tata1234',
                  ),
                ])
            : () => AuthenticationFirebaseDataSourceImpl(
                googleSignIn: GoogleSignIn(
                    clientId: DefaultFirebaseOptions.ios.iosClientId)),
      )
      ..registerLazySingleton<AuthenticationCacheDataSource<int>>(
        () => AuthenticationCacheDataSourceImpl<int>(),
      );

    await getIt.allReady();
  }
}
