import 'dart:async';

import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:isekai_wiki/pages/discover.dart';
import 'package:isekai_wiki/pages/home.dart';
import 'package:isekai_wiki/pages/search.dart';
import 'package:isekai_wiki/pages/own_profile.dart';
import 'package:isekai_wiki/styles.dart';

class TabsPageController extends GetxController {
  final tabController = CupertinoTabController();
  final streamController = StreamController.broadcast();
  var tabIndex = 0.obs;

  void emit(String eventName) {
    streamController.add(eventName);
  }

  Future<bool> handleWillPop() async {
    if (Navigator.canPop(Get.context!)) {
      Get.back();
      return false;
    } else if (tabController.index != 0) {
      tabController.index = 0;
      return false;
    }
    return true;
  }

  void handleTapTab(int tabIndex) {
    if (tabIndex != this.tabIndex.value) {
      this.tabIndex.value = tabIndex;
      return;
    }

    switch (tabIndex) {
      case 0:
        emit("tap:home");
        break;
    }
  }

  void toSearchPage() {
    tabController.index = 2;
  }
}

class IsekaiWikiTabsPage extends StatelessWidget {
  const IsekaiWikiTabsPage({super.key});

  @override
  Widget build(BuildContext context) {
    var c = Get.put(TabsPageController());

    return WillPopScope(
      onWillPop: c.handleWillPop,
      child: CupertinoTabScaffold(
        controller: c.tabController,
        tabBar: CupertinoTabBar(
          backgroundColor: Styles.themeBottomColor,
          activeColor: Styles.themeMainColor,
          border: const Border(
              top: BorderSide(color: CupertinoColors.systemGrey5, width: 2)),
          height: 56,
          onTap: c.handleTapTab,
          items: const <BottomNavigationBarItem>[
            BottomNavigationBarItem(
              icon: Icon(CupertinoIcons.house),
              label: '首页',
            ),
            BottomNavigationBarItem(
              icon: Icon(CupertinoIcons.lightbulb),
              label: '发现',
            ),
            BottomNavigationBarItem(
              icon: Icon(CupertinoIcons.search),
              label: '搜索',
            ),
            BottomNavigationBarItem(
              icon: Icon(CupertinoIcons.person),
              label: '我的',
            ),
          ],
        ),
        tabBuilder: (context, index) {
          switch (index) {
            case 0:
              return CupertinoTabView(builder: (context) {
                return CupertinoPageScaffold(
                  child: HomeTab(
                    onSearchClick: c.toSearchPage,
                  ),
                );
              });
            case 1:
              return CupertinoTabView(builder: (context) {
                return const CupertinoPageScaffold(
                  child: DiscoverTab(),
                );
              });
            case 2:
              return CupertinoTabView(builder: (context) {
                return const CupertinoPageScaffold(
                  child: SearchTab(),
                );
              });
            case 3:
              return CupertinoTabView(builder: (context) {
                return const CupertinoPageScaffold(
                  child: OwnProfileTab(),
                );
              });
          }
          return CupertinoTabView(builder: (context) {
            return const CupertinoPageScaffold(
              child: HomeTab(),
            );
          });
        },
      ),
    );
  }
}