import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;

import 'app_localizations_it.dart';

// ignore_for_file: type=lint

/// Callers can lookup localized strings with an instance of AppLocalizations
/// returned by `AppLocalizations.of(context)`.
///
/// Applications need to include `AppLocalizations.delegate()` in their app's
/// `localizationDelegates` list, and the locales they support in the app's
/// `supportedLocales` list. For example:
///
/// ```dart
/// import 'l10n/app_localizations.dart';
///
/// return MaterialApp(
///   localizationsDelegates: AppLocalizations.localizationsDelegates,
///   supportedLocales: AppLocalizations.supportedLocales,
///   home: MyApplicationHome(),
/// );
/// ```
///
/// ## Update pubspec.yaml
///
/// Please make sure to update your pubspec.yaml to include the following
/// packages:
///
/// ```yaml
/// dependencies:
///   # Internationalization support.
///   flutter_localizations:
///     sdk: flutter
///   intl: any # Use the pinned version from flutter_localizations
///
///   # Rest of dependencies
/// ```
///
/// ## iOS Applications
///
/// iOS applications define key application metadata, including supported
/// locales, in an Info.plist file that is built into the application bundle.
/// To configure the locales supported by your app, you’ll need to edit this
/// file.
///
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// project’s Runner folder.
///
/// Next, select the Information Property List item, select Add Item from the
/// Editor menu, then select Localizations from the pop-up menu.
///
/// Select and expand the newly-created Localizations item then, for each
/// locale your application supports, add a new item and select the locale
/// you wish to add from the pop-up menu in the Value field. This list should
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
/// property.
abstract class AppLocalizations {
  AppLocalizations(String locale)
    : localeName = intl.Intl.canonicalizedLocale(locale.toString());

  final String localeName;

  static AppLocalizations? of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

  static const LocalizationsDelegate<AppLocalizations> delegate =
      _AppLocalizationsDelegate();

  /// A list of this localizations delegate along with the default localizations
  /// delegates.
  ///
  /// Returns a list of localizations delegates containing this delegate along with
  /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
  /// and GlobalWidgetsLocalizations.delegate.
  ///
  /// Additional delegates can be added by appending to this list in
  /// MaterialApp. This list does not have to be used at all if a custom list
  /// of delegates is preferred or required.
  static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
      <LocalizationsDelegate<dynamic>>[
        delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ];

  /// A list of this localizations delegate's supported locales.
  static const List<Locale> supportedLocales = <Locale>[Locale('it')];

  /// No description provided for @authCubitCheckEmailToConfirmAccount.
  ///
  /// In it, this message translates to:
  /// **'Controlla la tua email per confermare l\'account!'**
  String get authCubitCheckEmailToConfirmAccount;

  /// No description provided for @authCubitResetPasswordEmailSentTo.
  ///
  /// In it, this message translates to:
  /// **'Email per reset password inviata a {email}!'**
  String authCubitResetPasswordEmailSentTo(String email);

  /// No description provided for @authError.
  ///
  /// In it, this message translates to:
  /// **'Errore di autenticazione: {message}'**
  String authError(String message);

  /// No description provided for @authScreenAlreadyHaveAccount.
  ///
  /// In it, this message translates to:
  /// **'Hai già un account?'**
  String get authScreenAlreadyHaveAccount;

  /// No description provided for @authScreenBusinessEmail.
  ///
  /// In it, this message translates to:
  /// **'Email aziendale'**
  String get authScreenBusinessEmail;

  /// No description provided for @authScreenCreateAccount.
  ///
  /// In it, this message translates to:
  /// **'CREA ACCOUNT'**
  String get authScreenCreateAccount;

  /// No description provided for @authScreenDontHaveAccount.
  ///
  /// In it, this message translates to:
  /// **'Non hai un account?'**
  String get authScreenDontHaveAccount;

  /// No description provided for @authScreenForgotPassword.
  ///
  /// In it, this message translates to:
  /// **'Password dimenticata/Invito scaduto?'**
  String get authScreenForgotPassword;

  /// No description provided for @authScreenLogin.
  ///
  /// In it, this message translates to:
  /// **'LOGIN'**
  String get authScreenLogin;

  /// No description provided for @authScreenLoginToManageYourBusiness.
  ///
  /// In it, this message translates to:
  /// **'Accedi per gestire il tuo business'**
  String get authScreenLoginToManageYourBusiness;

  /// No description provided for @authScreenSignUp.
  ///
  /// In it, this message translates to:
  /// **'REGISTRATI'**
  String get authScreenSignUp;

  /// No description provided for @authScreenStartTodayToDigitalizeYourStore.
  ///
  /// In it, this message translates to:
  /// **'Inizia oggi a digitalizzare il tuo negozio'**
  String get authScreenStartTodayToDigitalizeYourStore;

  /// No description provided for @authScreenWelcomeBack.
  ///
  /// In it, this message translates to:
  /// **'BENTORNATO'**
  String get authScreenWelcomeBack;

  /// No description provided for @commonClose.
  ///
  /// In it, this message translates to:
  /// **'Chiudi'**
  String get commonClose;

  /// No description provided for @commonComingSoon.
  ///
  /// In it, this message translates to:
  /// **'Coming soon'**
  String get commonComingSoon;

  /// No description provided for @commonDashboard.
  ///
  /// In it, this message translates to:
  /// **'Panoramica'**
  String get commonDashboard;

  /// No description provided for @commonError.
  ///
  /// In it, this message translates to:
  /// **'Si è verificato un errore: {error}'**
  String commonError(String error);

  /// No description provided for @commonMasterData.
  ///
  /// In it, this message translates to:
  /// **'Anagrafiche'**
  String get commonMasterData;

  /// No description provided for @commonNewPassword.
  ///
  /// In it, this message translates to:
  /// **'Nuova Password'**
  String get commonNewPassword;

  /// No description provided for @commonNote.
  ///
  /// In it, this message translates to:
  /// **'Nota'**
  String get commonNote;

  /// No description provided for @commonSave.
  ///
  /// In it, this message translates to:
  /// **'Salva'**
  String get commonSave;

  /// No description provided for @commonOperation.
  ///
  /// In it, this message translates to:
  /// **'Operazione'**
  String get commonOperation;

  /// No description provided for @commonSettings.
  ///
  /// In it, this message translates to:
  /// **'Impostazioni'**
  String get commonSettings;

  /// No description provided for @commonStickyNotes.
  ///
  /// In it, this message translates to:
  /// **'Sticky Notes'**
  String get commonStickyNotes;

  /// No description provided for @commonTask.
  ///
  /// In it, this message translates to:
  /// **'Attività'**
  String get commonTask;

  /// No description provided for @homeExpiringContracts.
  ///
  /// In it, this message translates to:
  /// **'Contratti in scadenza'**
  String get homeExpiringContracts;

  /// No description provided for @homeLatestOperationTickets.
  ///
  /// In it, this message translates to:
  /// **'Ultime assistenze'**
  String get homeLatestOperationTickets;

  /// No description provided for @homeLatestOperations.
  ///
  /// In it, this message translates to:
  /// **'Ultime Operazioni'**
  String get homeLatestOperations;

  /// No description provided for @homeMyTasks.
  ///
  /// In it, this message translates to:
  /// **'Mie Attività'**
  String get homeMyTasks;

  /// No description provided for @homeNewOperationTicket.
  ///
  /// In it, this message translates to:
  /// **'Nuova assistenza'**
  String get homeNewOperationTicket;

  /// No description provided for @homeNoStoreFound.
  ///
  /// In it, this message translates to:
  /// **'Nessun negozio trovato'**
  String get homeNoStoreFound;

  /// No description provided for @homeWelcomeBack.
  ///
  /// In it, this message translates to:
  /// **'Bentornato, {name}! 👋'**
  String homeWelcomeBack(String name);

  /// No description provided for @imageViewerWidgetErrorOpening.
  ///
  /// In it, this message translates to:
  /// **'Errore durante l\'apertura dell\'immagine'**
  String get imageViewerWidgetErrorOpening;

  /// No description provided for @pdfViewerAnteprimaPdf.
  ///
  /// In it, this message translates to:
  /// **'Anteprima PDF'**
  String get pdfViewerAnteprimaPdf;

  /// No description provided for @setPasswordInviteAcceptedChoosePassword.
  ///
  /// In it, this message translates to:
  /// **'Hai accettato l\'invito. Scegli una password sicura per accedere in futuro.'**
  String get setPasswordInviteAcceptedChoosePassword;

  /// No description provided for @setPasswordScreenAtLeast6Chars.
  ///
  /// In it, this message translates to:
  /// **'La password deve avere almeno 6 caratteri'**
  String get setPasswordScreenAtLeast6Chars;

  /// No description provided for @setPasswordScreenPasswordSetWelcome.
  ///
  /// In it, this message translates to:
  /// **'Password impostata! Benvenuto a bordo 🚀'**
  String get setPasswordScreenPasswordSetWelcome;

  /// No description provided for @setPasswordScreenSaveAndStart.
  ///
  /// In it, this message translates to:
  /// **'SALVA E INIZIA'**
  String get setPasswordScreenSaveAndStart;

  /// No description provided for @setPasswordScreenSetPassword.
  ///
  /// In it, this message translates to:
  /// **'Imposta una nuova Password'**
  String get setPasswordScreenSetPassword;

  /// No description provided for @setPasswordScreenWelcomeInFlux.
  ///
  /// In it, this message translates to:
  /// **'Benvenuto in FLUX!'**
  String get setPasswordScreenWelcomeInFlux;

  /// No description provided for @createCompanyScreenCompanyConfiguration.
  ///
  /// In it, this message translates to:
  /// **'Configurazione Azienda'**
  String get createCompanyScreenCompanyConfiguration;

  /// No description provided for @commonSavingError.
  ///
  /// In it, this message translates to:
  /// **'Errore durante il salvataggio'**
  String get commonSavingError;

  /// No description provided for @createCompanyScreenFiscalData.
  ///
  /// In it, this message translates to:
  /// **'DATI FISCALI'**
  String get createCompanyScreenFiscalData;

  /// No description provided for @createCompanyScreenCompanyName.
  ///
  /// In it, this message translates to:
  /// **'Ragione Sociale'**
  String get createCompanyScreenCompanyName;

  /// No description provided for @createCompanyScreenVatId.
  ///
  /// In it, this message translates to:
  /// **'Partita IVA'**
  String get createCompanyScreenVatId;

  /// No description provided for @createCompanyScreenFiscalCode.
  ///
  /// In it, this message translates to:
  /// **'Codice Fiscale'**
  String get createCompanyScreenFiscalCode;

  /// No description provided for @createCompanyScreenSdiPec.
  ///
  /// In it, this message translates to:
  /// **'Codice Univoco (SDI) / PEC'**
  String get createCompanyScreenSdiPec;

  /// No description provided for @createCompanyScreenCompanyLegalAddress.
  ///
  /// In it, this message translates to:
  /// **'SEDE LEGALE'**
  String get createCompanyScreenCompanyLegalAddress;

  /// No description provided for @commonAddress.
  ///
  /// In it, this message translates to:
  /// **'Indirizzo e n. civico'**
  String get commonAddress;

  /// No description provided for @commonCity.
  ///
  /// In it, this message translates to:
  /// **'Città'**
  String get commonCity;

  /// No description provided for @commonZipCode.
  ///
  /// In it, this message translates to:
  /// **'CAP'**
  String get commonZipCode;

  /// No description provided for @commonProvince.
  ///
  /// In it, this message translates to:
  /// **'Prov'**
  String get commonProvince;

  /// No description provided for @commonCountry.
  ///
  /// In it, this message translates to:
  /// **'Paese'**
  String get commonCountry;

  /// No description provided for @createCompanyScreenUploadLogo.
  ///
  /// In it, this message translates to:
  /// **'Carica Logo Aziendale'**
  String get createCompanyScreenUploadLogo;

  /// No description provided for @createCompanyScreenWillBeUsedForReceipts.
  ///
  /// In it, this message translates to:
  /// **'Verrà utilizzato per le tue stampe e ricevute'**
  String get createCompanyScreenWillBeUsedForReceipts;

  /// No description provided for @createCompanyScreenSaveCompany.
  ///
  /// In it, this message translates to:
  /// **'SALVA AZIENDA'**
  String get createCompanyScreenSaveCompany;

  /// No description provided for @createCompanyScreenSetupYourCompany.
  ///
  /// In it, this message translates to:
  /// **'Configura la tua Azienda'**
  String get createCompanyScreenSetupYourCompany;

  /// No description provided for @createCompanyScreenFluxNeedsYourFiscalData.
  ///
  /// In it, this message translates to:
  /// **'FLUX ha bisogno dei tuoi dati fiscali per gestire correttamente le fatturazioni e le attivazioni dei tuoi negozi.'**
  String get createCompanyScreenFluxNeedsYourFiscalData;

  /// No description provided for @operationFormAttachmentSectionNoCustomer.
  ///
  /// In it, this message translates to:
  /// **'Devi prima selezionare un cliente'**
  String get operationFormAttachmentSectionNoCustomer;
}

class _AppLocalizationsDelegate
    extends LocalizationsDelegate<AppLocalizations> {
  const _AppLocalizationsDelegate();

  @override
  Future<AppLocalizations> load(Locale locale) {
    return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
  }

  @override
  bool isSupported(Locale locale) =>
      <String>['it'].contains(locale.languageCode);

  @override
  bool shouldReload(_AppLocalizationsDelegate old) => false;
}

AppLocalizations lookupAppLocalizations(Locale locale) {
  // Lookup logic when only language code is specified.
  switch (locale.languageCode) {
    case 'it':
      return AppLocalizationsIt();
  }

  throw FlutterError(
    'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
    'an issue with the localizations generation tool. Please file an issue '
    'on GitHub with a reproducible sample app and the gen-l10n configuration '
    'that was used.',
  );
}
