//
//  QuickActionsMenu.swift
//  lichunWebsocket
//
//  Quick actions menu for the More tab
//

import SwiftUI

// MARK: - Quick Action Model

struct QuickAction: Identifiable {
    let id = UUID()
    let icon: String
    let title: String
    let subtitle: String?
    let badge: Int?
    let color: Color
    let action: () -> Void

    init(icon: String, title: String, subtitle: String? = nil, badge: Int? = nil, color: Color = AppColors.primary, action: @escaping () -> Void) {
        self.icon = icon
        self.title = title
        self.subtitle = subtitle
        self.badge = badge
        self.color = color
        self.action = action
    }
}

// MARK: - Quick Actions Menu

struct QuickActionsMenu: View {
    @Environment(\.dismiss) var dismiss
    let actions: [QuickAction]

    var body: some View {
        NavigationView {
            ScrollView {
                VStack(spacing: AppSpacing.cardInnerSpacing) {
                    ForEach(actions) { action in
                        QuickActionRow(action: action) {
                            hapticFeedback(style: .light)
                            action.action()
                            // Small delay to show the tap feedback before dismissing
                            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
                                dismiss()
                            }
                        }
                    }
                }
                .padding(.horizontal, AppSpacing.screenPaddingHorizontal)
                .padding(.vertical, AppSpacing.screenPaddingVertical)
            }
            .background(AppColors.background)
            .navigationTitle("Quick Actions")
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button {
                        hapticFeedback(style: .light)
                        dismiss()
                    } label: {
                        Image(systemName: "xmark.circle.fill")
                            .font(.system(size: 24))
                            .foregroundColor(AppColors.secondaryText)
                            .symbolRenderingMode(.hierarchical)
                    }
                }
            }
        }
        .presentationDetents([.medium, .large])
        .presentationDragIndicator(.visible)
    }
}

// MARK: - Quick Action Row

private struct QuickActionRow: View {
    let action: QuickAction
    let onTap: () -> Void

    var body: some View {
        Button(action: onTap) {
            HStack(spacing: AppSpacing.md) {
                // Icon container
                ZStack {
                    Circle()
                        .fill(action.color.opacity(0.15))
                        .frame(width: AppSpacing.iconSizeXLarge, height: AppSpacing.iconSizeXLarge)

                    Image(systemName: action.icon)
                        .font(.system(size: 22, weight: .semibold))
                        .foregroundColor(action.color)

                    // Badge
                    if let badge = action.badge, badge > 0 {
                        Text("\(min(badge, 99))")
                            .font(.appMicroBold)
                            .foregroundColor(.white)
                            .padding(.horizontal, badge > 9 ? AppSpacing.xxs : 0)
                            .frame(minWidth: AppSpacing.badgeMinSize + 2, minHeight: AppSpacing.badgeMinSize + 2)
                            .background(
                                Circle()
                                    .fill(AppColors.error)
                            )
                            .overlay(
                                Circle()
                                    .strokeBorder(Color.white, lineWidth: 2)
                            )
                            .offset(x: AppSpacing.md, y: -AppSpacing.md)
                    }
                }

                // Text content
                VStack(alignment: .leading, spacing: AppSpacing.xxs) {
                    Text(action.title)
                        .font(.appHeadline)
                        .foregroundColor(AppColors.primaryText)

                    if let subtitle = action.subtitle {
                        Text(subtitle)
                            .font(.appIconLabel)
                            .foregroundColor(AppColors.secondaryText)
                            .lineLimit(1)
                    }
                }

                Spacer()

                // Chevron
                Image(systemName: "chevron.right")
                    .font(.appIconLabel)
                    .foregroundColor(AppColors.disabledText)
            }
            .padding(AppSpacing.md)
            .background(
                RoundedRectangle(cornerRadius: AppSpacing.cornerRadius, style: .continuous)
                    .fill(AppColors.surfaceElevated)
                    .shadow(color: Color.black.opacity(0.05), radius: AppSpacing.Shadow.radiusSoft, x: 0, y: 2)
            )
        }
        .buttonStyle(QuickActionsScaleButtonStyle())
    }
}

// MARK: - Scale Button Style

fileprivate struct QuickActionsScaleButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .scaleEffect(configuration.isPressed ? 0.97 : 1.0)
            .animation(.spring(response: 0.3, dampingFraction: 0.6), value: configuration.isPressed)
    }
}

// MARK: - Preview

#if DEBUG
struct QuickActionsMenu_Previews: PreviewProvider {
    static var previews: some View {
        QuickActionsMenu(actions: [
            QuickAction(icon: "envelope.fill", title: "Messages", subtitle: "3 unread", badge: 3, color: AppColors.primary, action: {}),
            QuickAction(icon: "trophy.fill", title: "Achievements", subtitle: "1 new unlock", badge: 1, color: AppColors.happiness, action: {}),
            QuickAction(icon: "person.2.fill", title: "Relationships", subtitle: "Manage connections", color: AppColors.loveInterest, action: {}),
            QuickAction(icon: "cart.fill", title: "Store", subtitle: "Shop for items", color: AppColors.money, action: {}),
            QuickAction(icon: "bag.fill", title: "Items", subtitle: "Your inventory", color: AppColors.diamond, action: {}),
            QuickAction(icon: "person.circle.fill", title: "Profile", subtitle: "Settings & more", color: AppColors.secondary, action: {})
        ])
    }
}
#endif
