import 'dart:math';
import 'package:flutter/material.dart';

class TimeSkyAnimation extends StatelessWidget {
  final int hour; // ساعت بین ۰ تا ۲۳

  const TimeSkyAnimation({Key? key, required this.hour}) : super(key: key);

  bool get _isDay => hour >= 6 && hour < 18; // فرض می‌کنیم روز بین ۶ صبح تا ۶ عصر است

  double _getYofMoon(double x) {
    // فرمول حرکت قوسی شکل
    double r = 12;
    double a = -12;
    return sqrt(max(0, r * r - (x + a) * (x + a)));
  }

  @override
  Widget build(BuildContext context) {
    // نرمال‌سازی ساعت برای حرکت نرم‌تر در انیمیشن (۰ تا ۲۴)
    final double hValue = hour.toDouble();

    return Container(
      height: 120, // ارتفاع کانتینر آسمان
      width: double.infinity,
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(24), // گردی گوشه‌ها مشابه دیزاین دیدوان
        boxShadow: [
          BoxShadow(
            color: Colors.black.withOpacity(0.05),
            blurRadius: 10,
            offset: const Offset(0, 4),
          )
        ],
      ),
      clipBehavior: Clip.antiAlias,
      child: Stack(
        children: [
          // پس‌زمینه گرادیانت متحرک آسمان
          AnimatedPositioned(
            duration: const Duration(milliseconds: 500),
            top: hValue * -84, // حرکت عمودی گرادیانت بر اساس ساعت
            left: hValue * -84, // حرکت افقی گرادیانت
            child: Container(
              width: 2400, // عرض زیاد برای حرکت روان گرادیانت
              height: 2400,
              decoration: const BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.topLeft,
                  end: Alignment.bottomRight,
                  colors: [
                    Color(0xff0d0221), // نیمه شب (تاریک‌ترین)
                    Color(0xff292929), // بامداد
                    Color(0xffFAD7A3), // طلوع
                    Color(0xff2ED4F9), // ظهر (روشن‌ترین)
                    Color(0xff2ED4F9), // بعد از ظهر
                    Color(0xffFAD7A3), // غروب
                    Color(0xff292929), // اوایل شب
                    Color(0xff0d0221), // نیمه شب
                  ],
                ),
              ),
            ),
          ),
          // خورشید یا ماه
          AnimatedPositioned(
            duration: const Duration(milliseconds: 500),
            bottom: _getYofMoon(hValue > 12 ? hValue - 12 : hValue) * 4,
            left: (hValue + 1) * 12, // حرکت افقی
            child: AnimatedSwitcher(
              duration: const Duration(milliseconds: 500),
              switchInCurve: Curves.easeInOut,
              switchOutCurve: Curves.easeInOut,
              transitionBuilder: (Widget child, Animation<double> animation) {
                return FadeTransition(opacity: animation, child: ScaleTransition(scale: animation, child: child));
              },
              child: _isDay
                  ? Image.asset(
                      'lib/assets/images/sky/sun.png',
                      key: const ValueKey(1),
                      width: 80,
                      height: 80,
                    )
                  : Image.asset(
                      'lib/assets/images/sky/Moon.png',
                      key: const ValueKey(2),
                      width: 80,
                      height: 80,
                    ),
            ),
          ),
        ],
      ),
    );
  }
}