import 'package:PiliPlus/common/widgets/image_save.dart';
import 'package:PiliPlus/common/widgets/loading_widget.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:flutter/material.dart';
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/network_img_layer.dart';
import 'package:PiliPlus/utils/utils.dart';

import '../../../utils/grid.dart';

Widget searchBangumiPanel(context, ctr, LoadingState loadingState) {
  late TextStyle style = TextStyle(fontSize: 13);
  return switch (loadingState) {
    Loading() => loadingWidget,
    Success() => (loadingState.response as List?)?.isNotEmpty == true
        ? CustomScrollView(
            controller: ctr.scrollController,
            slivers: [
              SliverPadding(
                padding: EdgeInsets.only(
                  bottom: MediaQuery.of(context).padding.bottom + 80,
                ),
                sliver: SliverGrid(
                  gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                    maxCrossAxisExtent: Grid.smallCardWidth * 2,
                    mainAxisExtent: 160,
                  ),
                  delegate: SliverChildBuilderDelegate(
                    (BuildContext context, int index) {
                      if (index == loadingState.response.length - 1) {
                        ctr.onLoadMore();
                      }
                      var i = loadingState.response[index];
                      return InkWell(
                        onTap: () {
                          Utils.viewBangumi(seasonId: i.seasonId);
                        },
                        onLongPress: () => imageSaveDialog(
                          context: context,
                          title: (i.title as List?)
                                  ?.map((item) => item['text'])
                                  .join() ??
                              '',
                          cover: i.cover,
                        ),
                        child: Padding(
                          padding: const EdgeInsets.symmetric(
                            horizontal: StyleString.safeSpace,
                            vertical: StyleString.cardSpace,
                          ),
                          child: Row(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Stack(
                                children: [
                                  NetworkImgLayer(
                                    width: 111,
                                    height: 148,
                                    src: i.cover,
                                  ),
                                  if (i.seasonTypeName?.isNotEmpty == true)
                                    PBadge(
                                      text: i.seasonTypeName,
                                      top: 6.0,
                                      right: 4.0,
                                      bottom: null,
                                      left: null,
                                    )
                                ],
                              ),
                              const SizedBox(width: 10),
                              Expanded(
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    const SizedBox(height: 4),
                                    Text.rich(
                                      // maxLines: 1,
                                      // overflow: TextOverflow.ellipsis,
                                      TextSpan(
                                        style: TextStyle(
                                            color: Theme.of(context)
                                                .colorScheme
                                                .onSurface),
                                        children: [
                                          for (var i in i.title) ...[
                                            TextSpan(
                                              text: i['text'],
                                              style: TextStyle(
                                                fontSize: Theme.of(context)
                                                    .textTheme
                                                    .titleSmall!
                                                    .fontSize!,
                                                fontWeight: FontWeight.bold,
                                                color: i['type'] == 'em'
                                                    ? Theme.of(context)
                                                        .colorScheme
                                                        .primary
                                                    : Theme.of(context)
                                                        .colorScheme
                                                        .onSurface,
                                              ),
                                            ),
                                          ],
                                        ],
                                      ),
                                    ),
                                    const SizedBox(height: 12),
                                    Text(
                                        '评分:${i.mediaScore['score'].toString()}',
                                        style: style),
                                    Row(
                                      children: [
                                        Text(i.areas, style: style),
                                        const SizedBox(width: 3),
                                        const Text('·'),
                                        const SizedBox(width: 3),
                                        Text(
                                            Utils.dateFormat(i.pubtime)
                                                .toString(),
                                            style: style),
                                      ],
                                    ),
                                    Row(
                                      children: [
                                        Text(i.styles, style: style),
                                        const SizedBox(width: 3),
                                        const Text('·'),
                                        const SizedBox(width: 3),
                                        Text(i.indexShow, style: style),
                                      ],
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                        ),
                      );
                    },
                    childCount: loadingState.response.length,
                  ),
                ),
              ),
            ],
          )
        : errorWidget(
            callback: ctr.onReload,
          ),
    Error() => errorWidget(
        errMsg: loadingState.errMsg,
        callback: ctr.onReload,
      ),
    LoadingState() => throw UnimplementedError(),
  };
}
