import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:immich_mobile/constants/hive_box.dart';

class ImageViewerPage extends StatelessWidget {
  final String imageUrl;
  final String heroTag;
  final String thumbnailUrl;

  const ImageViewerPage({Key? key, required this.imageUrl, required this.heroTag, required this.thumbnailUrl})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    var box = Hive.box(userInfoBox);

    return Scaffold(
      backgroundColor: Colors.black,
      appBar: AppBar(
        toolbarHeight: 60,
        backgroundColor: Colors.black,
        leading: IconButton(
            onPressed: () {
              AutoRouter.of(context).pop();
            },
            icon: const Icon(Icons.arrow_back_ios)),
      ),
      body: Dismissible(
        direction: DismissDirection.vertical,
        onDismissed: (_) {
          AutoRouter.of(context).pop();
        },
        key: Key(heroTag),
        child: Center(
          child: Hero(
            tag: heroTag,
            child: CachedNetworkImage(
              fit: BoxFit.cover,
              imageUrl: imageUrl,
              httpHeaders: {"Authorization": "Bearer ${box.get(accessTokenKey)}"},
              fadeInDuration: const Duration(milliseconds: 250),
              errorWidget: (context, url, error) => const Icon(Icons.error),
              placeholder: (context, url) {
                return CachedNetworkImage(
                  fit: BoxFit.cover,
                  imageUrl: thumbnailUrl,
                  httpHeaders: {"Authorization": "Bearer ${box.get(accessTokenKey)}"},
                  placeholderFadeInDuration: const Duration(milliseconds: 0),
                  progressIndicatorBuilder: (context, url, downloadProgress) => Transform.scale(
                    scale: 0.2,
                    child: CircularProgressIndicator(value: downloadProgress.progress),
                  ),
                  errorWidget: (context, url, error) => const Icon(Icons.error),
                );
              },
            ),
          ),
        ),
      ),
    );
  }
}