import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:recording_tool/features/competition_teams/model/model_competition_team_detail.dart';
import 'package:recording_tool/shared/widgets/app_button.dart';

/// 弹窗回传选中侧索引：0 = teamA（红队），1 = teamB（蓝队）
class ManualWinnerDialog extends StatefulWidget {
  const ManualWinnerDialog({
    super.key,
    required this.matchup,
    this.initialWinnerSideIndex,
  });

  final Matchup matchup;
  final int? initialWinnerSideIndex;

  static Future<int?> show(
    BuildContext context, {
    required Matchup matchup,
    int? initialWinnerSideIndex,
  }) {
    return showDialog<int>(
      context: context,
      barrierDismissible: false,
      builder: (_) => ManualWinnerDialog(
        matchup: matchup,
        initialWinnerSideIndex: initialWinnerSideIndex,
      ),
    );
  }

  @override
  State<ManualWinnerDialog> createState() => _ManualWinnerDialogState();
}

class _ManualWinnerDialogState extends State<ManualWinnerDialog> {
  /// 0 = teamA，1 = teamB
  int? _selectedSideIndex;

  Team? get _teamA {
    final teams = widget.matchup.teamA;
    if (teams == null || teams.isEmpty) return null;
    return teams.first;
  }

  Team? get _teamB {
    final teams = widget.matchup.teamB;
    if (teams == null || teams.isEmpty) return null;
    return teams.first;
  }

  @override
  void initState() {
    super.initState();
    final initial = widget.initialWinnerSideIndex;
    if (initial == 0 || initial == 1) {
      _selectedSideIndex = initial;
    }
  }

  @override
  Widget build(BuildContext context) {
    final teamA = _teamA;
    final teamB = _teamB;

    return AlertDialog(
      insetPadding: EdgeInsets.symmetric(horizontal: 22.w),
      contentPadding: EdgeInsets.zero,
      clipBehavior: Clip.antiAlias,
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)),
      content: SizedBox(
        width: 320.w,
        child: SingleChildScrollView(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Image.asset(
                'assets/images/image_dialog_bg.png',
                width: 320.w,
                height: 112.h,
                fit: BoxFit.cover,
              ),
              Padding(
                padding: EdgeInsets.fromLTRB(20.w, 8.h, 20.w, 20.h),
                child: Column(
                  children: [
                    Text(
                      '请在比赛结束前处理',
                      key: const ValueKey('manual-winner-dialog-title'),
                      style: TextStyle(
                        fontSize: 20.sp,
                        fontWeight: FontWeight.w700,
                        color: const Color(0xFF20242B),
                      ),
                    ),
                    SizedBox(height: 16.h),
                    if (teamA != null) ...[
                      _TeamChoice(
                        team: teamA,
                        sideIndex: 0,
                        color: const Color(0xFFFF6B75),
                        selected: _selectedSideIndex == 0,
                        onTap: () => setState(() => _selectedSideIndex = 0),
                      ),
                      SizedBox(height: 10.h),
                    ],
                    if (teamB != null)
                      _TeamChoice(
                        team: teamB,
                        sideIndex: 1,
                        color: const Color(0xFF20BFA9),
                        selected: _selectedSideIndex == 1,
                        onTap: () => setState(() => _selectedSideIndex = 1),
                      ),
                    SizedBox(height: 20.h),
                    Row(
                      children: [
                        Expanded(
                          child: AppButton(
                            label: '取消',
                            variant: AppButtonVariant.secondary,
                            onPressed: () => Navigator.of(context).pop(),
                          ),
                        ),
                        SizedBox(width: 14.w),
                        Expanded(
                          child: AppButton(
                            label: '确定',
                            onPressed: _selectedSideIndex == null
                                ? null
                                : () => Navigator.of(
                                    context,
                                  ).pop(_selectedSideIndex),
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class _TeamChoice extends StatelessWidget {
  const _TeamChoice({
    required this.team,
    required this.sideIndex,
    required this.color,
    required this.selected,
    required this.onTap,
  });

  final Team team;
  final int sideIndex;
  final Color color;
  final bool selected;
  final VoidCallback onTap;

  @override
  Widget build(BuildContext context) {
    final name = team.teamName?.trim().isNotEmpty == true
        ? team.teamName!
        : '未命名队伍';
    final players = team.playerNames;
    return Semantics(
      selected: selected,
      button: true,
      label: '选择$name直接获胜',
      child: Material(
        color: color.withValues(alpha: selected ? 0.16 : 0.08),
        borderRadius: BorderRadius.circular(12.r),
        child: InkWell(
          key: ValueKey('winner-choice-side-$sideIndex'),
          onTap: onTap,
          borderRadius: BorderRadius.circular(12.r),
          child: Container(
            width: double.infinity,
            padding: EdgeInsets.symmetric(horizontal: 14.w, vertical: 12.h),
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(12.r),
              border: Border.all(
                color: selected ? color : color.withValues(alpha: 0.35),
                width: selected ? 2 : 1,
              ),
            ),
            child: Row(
              children: [
                AnimatedContainer(
                  duration: const Duration(milliseconds: 160),
                  width: 22.r,
                  height: 22.r,
                  decoration: BoxDecoration(
                    shape: BoxShape.circle,
                    border: Border.all(color: selected ? color : Colors.grey),
                    color: selected ? color : Colors.transparent,
                  ),
                  child: selected
                      ? Icon(Icons.check, size: 15.r, color: Colors.white)
                      : null,
                ),
                SizedBox(width: 12.w),
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        name,
                        style: TextStyle(
                          fontSize: 17.sp,
                          fontWeight: FontWeight.w600,
                          color: const Color(0xFF20242B),
                        ),
                      ),
                      if (players.isNotEmpty) ...[
                        SizedBox(height: 4.h),
                        Text(
                          players,
                          style: TextStyle(
                            fontSize: 14.sp,
                            color: const Color(0xFF606874),
                          ),
                        ),
                      ],
                    ],
                  ),
                ),
                SizedBox(width: 8.w),
                Text(
                  '直接获胜',
                  style: TextStyle(
                    fontSize: 13.sp,
                    fontWeight: FontWeight.w600,
                    color: color,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
