import 'dart:async';
import 'dart:ui';
import 'package:flutter/material.dart';

class CooldownTimer extends StatefulWidget {
  final DateTime createdAt;
  final VoidCallback onTimerFinish;

  const CooldownTimer({
    Key? key,
    required this.createdAt,
    required this.onTimerFinish,
  }) : super(key: key);

  @override
  _CooldownTimerState createState() => _CooldownTimerState();
}

class _CooldownTimerState extends State<CooldownTimer> {
  late Timer _timer;
  late Duration _timeRemaining;

  @override
  void initState() {
    super.initState();
    _updateRemainingTime();
    // Update the timer every second
    _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      _updateRemainingTime();
    });
  }

  void _updateRemainingTime() {
    final cooldownEnd = widget.createdAt.add(const Duration(minutes: 60));
    final now = DateTime.now();

    if (now.isAfter(cooldownEnd)) {
      _timeRemaining = Duration.zero;
      _timer.cancel();
      // Notify the parent widget that the timer is done
      WidgetsBinding.instance.addPostFrameCallback((_) {
        widget.onTimerFinish();
      });
    } else {
      _timeRemaining = cooldownEnd.difference(now);
    }
    // Trigger a rebuild
    setState(() {});
  }

  @override
  void dispose() {
    _timer.cancel();
    super.dispose();
  }

  String _formatDuration(Duration duration) {
    final minutes = duration.inMinutes.remainder(60).toString().padLeft(2, '0');
    final seconds = duration.inSeconds.remainder(60).toString().padLeft(2, '0');
    return '$minutes:$seconds';
  }

  @override
  Widget build(BuildContext context) {
    if (_timeRemaining == Duration.zero) {
      return const SizedBox
          .shrink(); // Or some other widget indicating it's enabled
    }

    return Row(
      mainAxisSize: MainAxisSize.min,
      children: [
        Icon(
          Icons.timer,
          color: Colors.orange.shade700,
          size: 18,
        ),
        const SizedBox(width: 6),
        Text(
          _formatDuration(_timeRemaining),
          style: TextStyle(
            color: Colors.orange.shade700,
            fontSize: 14,
            fontWeight: FontWeight.bold,
            fontFamily: 'monospace',
            fontFeatures: const [FontFeature.tabularFigures()],
          ),
        ),
      ],
    );
  }
}
