import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/services/media/media.dart';
import 'package:didvan/views/widgets/didvan/icon_button.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:didvan/views/widgets/skeleton_image.dart';
import 'package:flutter/material.dart';

class DidvanBNB extends StatelessWidget {
  final int currentTabIndex;
  final void Function(int index) onTabChanged;

  const DidvanBNB(
      {Key? key, required this.currentTabIndex, required this.onTabChanged})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<bool>(
        stream: MediaService.audioPlayer.playingStream,
        builder: (context, snapshot) {
          return Stack(
            children: [
              AnimatedContainer(
                duration: DesignConfig.lowAnimationDuration,
                height: snapshot.data == true ? 120 : 72,
                decoration: BoxDecoration(
                  color: DesignConfig.isDark
                      ? Theme.of(context).colorScheme.focused
                      : Theme.of(context).colorScheme.navigation,
                  borderRadius: const BorderRadius.vertical(
                    top: Radius.circular(16),
                  ),
                ),
                child: Row(
                  children: [
                    const DidvanIconButton(
                      icon: DidvanIcons.close_regular,
                      gestureSize: 24,
                      onPressed: MediaService.resetAudioPlayer,
                    ),
                    const SizedBox(width: 16),
                    if (MediaService.audioPlayerCover != null)
                      SkeletonImage(imageUrl: MediaService.audioPlayerCover!),
                    const SizedBox(width: 16),
                  ],
                ),
              ),
              Positioned(
                bottom: 0,
                left: 0,
                right: 0,
                child: Container(
                  height: 72,
                  decoration: BoxDecoration(
                    color: Theme.of(context).colorScheme.surface,
                    borderRadius:
                        const BorderRadius.vertical(top: Radius.circular(16)),
                    boxShadow: DesignConfig.defaultShadow,
                  ),
                  padding: const EdgeInsets.symmetric(horizontal: 12),
                  child: Row(
                    children: [
                      _NavBarItem(
                        isSelected: currentTabIndex == 0,
                        title: 'اخبار',
                        selectedIcon: DidvanIcons.news_solid,
                        unselectedIcon: DidvanIcons.news_light,
                        onTap: () => onTabChanged(0),
                      ),
                      _NavBarItem(
                        isSelected: currentTabIndex == 1,
                        title: 'آمار',
                        selectedIcon: DidvanIcons.chart_solid,
                        unselectedIcon: DidvanIcons.chart_light,
                        onTap: () => onTabChanged(1),
                      ),
                      _NavBarItem(
                        isSelected: currentTabIndex == 2,
                        title: 'رادار',
                        selectedIcon: DidvanIcons.radar_solid,
                        unselectedIcon: DidvanIcons.radar_light,
                        onTap: () => onTabChanged(2),
                      ),
                      _NavBarItem(
                        isSelected: currentTabIndex == 3,
                        title: 'استودیو',
                        selectedIcon: DidvanIcons.play_circle_solid,
                        unselectedIcon: DidvanIcons.play_circle_light,
                        onTap: () => onTabChanged(3),
                      ),
                      _NavBarItem(
                        isSelected: currentTabIndex == 4,
                        title: 'تنظیمات',
                        selectedIcon: DidvanIcons.setting_solid,
                        unselectedIcon: DidvanIcons.setting_light,
                        onTap: () => onTabChanged(4),
                      ),
                    ],
                  ),
                ),
              ),
            ],
          );
        });
  }
}

class _NavBarItem extends StatelessWidget {
  final VoidCallback onTap;
  final bool isSelected;
  final String title;
  final IconData selectedIcon;
  final IconData unselectedIcon;
  const _NavBarItem({
    Key? key,
    required this.isSelected,
    required this.title,
    required this.selectedIcon,
    required this.unselectedIcon,
    required this.onTap,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Expanded(
      child: Tooltip(
        message: title,
        decoration: BoxDecoration(
          color: Theme.of(context).colorScheme.title,
          borderRadius: DesignConfig.highBorderRadius,
          boxShadow: DesignConfig.defaultShadow,
        ),
        child: GestureDetector(
          onTap: onTap,
          child: Container(
            color: Colors.transparent,
            child: Column(
              children: [
                const SizedBox(
                  height: 4,
                ),
                AnimatedContainer(
                  padding: const EdgeInsets.all(4),
                  duration: DesignConfig.lowAnimationDuration,
                  decoration: BoxDecoration(
                    shape: BoxShape.circle,
                    color: isSelected
                        ? Theme.of(context).colorScheme.focused
                        : Theme.of(context).colorScheme.surface,
                  ),
                  child: Icon(
                    isSelected ? selectedIcon : unselectedIcon,
                    size: 32,
                    color: DesignConfig.isDark
                        ? Theme.of(context).colorScheme.text
                        : Theme.of(context).colorScheme.title,
                  ),
                ),
                DidvanText(
                  title,
                  style: Theme.of(context).textTheme.caption,
                  color: Theme.of(context).colorScheme.title,
                ),
                const Spacer(),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
