// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

/// Helper widget for switching between a network image and a placeholder.
///
/// This bypasses network image provider when testing to not surface the
/// HTTP errors in tests by default.
class WebImage extends StatelessWidget {
  const WebImage({
    super.key,
    bool? enabled,
    this.imageUrl,
    this.placeholder,
    this.width = 50,
    this.height = 50,
  }) : _enabled = enabled;

  final bool? _enabled;
  bool? get enabled {
    // This being a getter is sketchy but it's ok because in any execution of this code,
    // the value returned from this getter cannot change.
    // If it was possible for this value to change over time then this would not be a
    // valid way to write a widget and we would instead have to use a StatefulWidget.
    if (_enabled != null) {
      return _enabled;
    }
    // We have to use Platform.environment, not bool.fromEnvironment, because when the code is
    // compiled, the environment does not contain the FLUTTER_TEST key, but when the code is
    // executed as a test, it does. We have to check kIsWeb because the Platform.environment
    // feature doesn't exist on Web.
    if (!kIsWeb && Platform.environment.containsKey('FLUTTER_TEST')) {
      return false;
    }
    return true;
  }

  /// The url to fetch the image from.
  final String? imageUrl;

  /// Widget to fall back to if environment does not support network images.
  final Widget? placeholder;

  /// Height of the image.
  final double width;

  /// Width of the image.
  final double height;

  @override
  Widget build(BuildContext context) {
    if (enabled!) {
      return Image.network(
        imageUrl!,
        width: width,
        height: height,
      );
    }
    return placeholder!;
  }
}
