import 'dart:convert';
import 'dart:typed_data';

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

class BackgroundAnimation extends StatefulWidget {
  final String animationJson;
  final String backgroundImageUrl;
  const BackgroundAnimation({
    super.key,
    required this.animationJson,
    required this.backgroundImageUrl,
  });

  @override
  State<BackgroundAnimation> createState() => _BackgroundAnimationState();
}

class _BackgroundAnimationState extends State<BackgroundAnimation>
    with SingleTickerProviderStateMixin {
  late final AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(vsync: this);
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      fit: StackFit.expand,
      children: [
        Image.network(
          widget.backgroundImageUrl,
          fit: BoxFit.cover,
        ),
        Lottie.memory(
          Uint8List.fromList(utf8.encode(widget.animationJson)),
          controller: _controller,
          onLoaded: (composition) {
            _controller
              ..duration = composition.duration
              ..repeat(
                period: composition.duration * 0.6,
              );
          },
          fit: BoxFit.cover,
        ),
      ],
    );
  }
}