import 'package:flutter/material.dart';
import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';

class DelayedLoadingIndicator extends StatelessWidget {
  /// The delay to avoid showing the loading indicator
  final Duration delay;

  /// Defaults to using the [ImmichLoadingIndicator]
  final Widget? child;

  /// An optional fade in duration to animate the loading
  final Duration? fadeInDuration;

  const DelayedLoadingIndicator({super.key, this.delay = const Duration(seconds: 3), this.child, this.fadeInDuration});

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: Future.delayed(delay),
      builder: (context, snapshot) {
        late Widget c;
        if (snapshot.connectionState == ConnectionState.done) {
          c = child ?? const ImmichLoadingIndicator(key: ValueKey('loading'));
        } else {
          c = Container(key: const ValueKey('hiding'));
        }

        return AnimatedSwitcher(duration: fadeInDuration ?? Duration.zero, child: c);
      },
    );
  }
}
