import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:aitrainer_app/library/image_cache.dart' as wt;
import 'package:aitrainer_app/library/transparent_image.dart';
import 'package:flutter_html/shims/dart_ui_real.dart';

// ignore: must_be_immutable
class MenuImage extends StatelessWidget {
  final int? workoutTreeId;
  final String imageName;
  bool filter;
  double radius;
  MenuImage({
    required this.workoutTreeId,
    required this.imageName,
    this.radius = 24,
    this.filter = false,
  });

  @override
  Widget build(BuildContext context) {
    if (workoutTreeId == null) {
      return Offstage();
    }
    String? imageString = this.getImage(workoutTreeId!, imageName);
    Widget? widget;
    if (imageString != null) {
      print("MemoryImage $workoutTreeId - $imageName");
      widget = ClipRRect(
          borderRadius: BorderRadius.circular(24.0),
          child: Container(
            padding: EdgeInsets.zero,
            color: Colors.black38,
            foregroundDecoration: BoxDecoration(
              color: Colors.black38,
              backgroundBlendMode: BlendMode.darken,
            ),
            child: FadeInImage(
              fadeInDuration: Duration(milliseconds: 100),
              image: MemoryImage(base64Decode(imageString)),
              placeholder: MemoryImage(kTransparentImage),
            ),
          ));
    } else {
      if (imageName.contains("https")) {
        print("https image $workoutTreeId  - $imageName");
        if (!wt.ImageCache().existsImageInMap(workoutTreeId!, imageName)) {
          widget = ClipRRect(
              borderRadius: BorderRadius.circular(radius),
              child: Container(
                padding: EdgeInsets.zero,
                foregroundDecoration: filter
                    ? BoxDecoration(
                        color: Colors.black38,
                        backgroundBlendMode: BlendMode.darken,
                      )
                    : null,
                color: Colors.transparent,
                child: FadeInImage(
                  fadeInDuration: Duration(milliseconds: 500),
                  image: NetworkImage(imageName),
                  placeholder: MemoryImage(kTransparentImage),
                ),
              ));
        }
      } else {
        widget = ClipRRect(
            borderRadius: BorderRadius.circular(radius),
            child: Container(
              padding: EdgeInsets.zero,
              color: Colors.transparent,
              foregroundDecoration: filter
                  ? BoxDecoration(
                      color: Colors.black38,
                      backgroundBlendMode: BlendMode.darken,
                    )
                  : null,
              child: Image.asset(imageName),
            ));
      }
    }
    if (widget == null) {
      return Offstage();
    }
    return widget;
  }

  String? getImage(int id, String name) {
    String? imageString;
    if (name.contains("http")) {
      imageString = wt.ImageCache().getImageString(id, name);
    }
    return imageString;
  }
}