//
//  SubscribeView.swift
//  wake
//
//  Created by fairclip on 2025/8/19.
//

import SwiftUI

// MARK: - 订阅计划枚举
enum SubscriptionPlan: String, CaseIterable {
    case free = "Free"
    case pioneer = "Pioneer"
    
    var displayName: String {
        return self.rawValue
    }
    
    var price: String {
        switch self {
        case .free:
            return "Free"
        case .pioneer:
            return "1$/Mon"
        }
    }
    
    var isPopular: Bool {
        return self == .pioneer
    }
}

// MARK: - 功能特性结构体
struct SubscriptionFeature {
    let name: String
    let freeValue: String
    let proValue: String
}

struct SubscribeView: View {
    @State private var selectedPlan: SubscriptionPlan? = .pioneer
    @State private var isLoading = false
    @Environment(\.presentationMode) var presentationMode
    
    // 功能对比数据
    private let features = [
        SubscriptionFeature(name: "Mystery Box Purchase:", freeValue: "3 /week", proValue: "Free"),
        SubscriptionFeature(name: "Material Upload:", freeValue: "50 images and\n5 videos/day", proValue: "Unlimited"),
        SubscriptionFeature(name: "Free Credits:", freeValue: "200 /day", proValue: "500 /day")
    ]
    
    var body: some View {
        NavigationView {
            ScrollView {
                VStack(spacing: 0) {
                    // 导航栏
                    navigationHeader
                    
                    // 当前订阅状态卡片
                    currentSubscriptionCard 
                    
                    // 积分信息
                    creditsSection
                    
                    VStack {
                        // 订阅计划选择
                        subscriptionPlansSection
                        
                        // 特别优惠提示
                        specialOfferBanner
                    }
                    .background(Theme.Colors.cardBackground)
                    .cornerRadius(Theme.CornerRadius.medium)
                    .padding(.horizontal, Theme.Spacing.lg)
                    .padding(.vertical, Theme.Spacing.lg)
                 
                    
                    // 功能对比表
                    featureComparisonTable
                    
                    // 订阅按钮
                    subscribeButton
                    
                    // 法律链接
                    legalLinks
                    
                    Spacer(minLength: 100)
                }
            }
            .background(Theme.Colors.background)
            .navigationBarHidden(true)
        }
    }
    
    // MARK: - 导航栏
    private var navigationHeader: some View {
        NaviHeader(title: "Subscription") {
            presentationMode.wrappedValue.dismiss()
        }
    }
    
    // MARK: - 当前订阅状态卡片
    private var currentSubscriptionCard: some View {
        SubscriptionStatusBar(
            status: .pioneer(expiryDate: Date()) ,
            onSubscribeTap: {
                // 订阅操作
                handleSubscribe()
            }
        )
        .padding(.horizontal, Theme.Spacing.xl)
    }
    
    // MARK: - 积分信息
    private var creditsSection: some View {
        VStack(spacing: 16) {
            CreditsInfoCard(
                totalCredits: 3290,
                onInfoTap: {
                    // 显示积分信息说明
                },
                onDetailTap: {
                    // 跳转到积分详情页面
                }
            )
            
        }
        .padding(.horizontal, Theme.Spacing.xl)
        .padding(.top, Theme.Spacing.xl)
    }
    
    // MARK: - 订阅计划选择
    private var subscriptionPlansSection: some View {
       PlanSelector(
            selectedPlan: $selectedPlan,
            onPlanSelected: { plan in
                print("Selected plan: \(plan.displayName)")
            }
        )
        .padding(.horizontal, Theme.Spacing.xl)
        .padding(.top, Theme.Spacing.xl)
    }
    
    // MARK: - 特别优惠横幅
    private var specialOfferBanner: some View {
        HStack(spacing: 0) {
            Text("First")
                .font(Typography.font(for: .footnote, family: .quicksandRegular))
                .foregroundColor(Theme.Colors.textPrimary)
            
            Text(" 100")
                .font(Typography.font(for: .footnote, family: .quicksandBold))
                .foregroundColor(Theme.Colors.textPrimary)
            
            Text(" users get a special deal: justs")
                .font(Typography.font(for: .footnote, family: .quicksandRegular))
                .foregroundColor(Theme.Colors.textPrimary)
            
            Text(" $1")
                .font(Typography.font(for: .footnote, family: .quicksandBold))
                .foregroundColor(Theme.Colors.textPrimary)
            
            Text(" for your first month!")
                .font(Typography.font(for: .footnote, family: .quicksandRegular))
                .foregroundColor(Theme.Colors.textPrimary)
        }
        .multilineTextAlignment(.center)
        .padding(.horizontal, Theme.Spacing.lg)
        .padding(.top, Theme.Spacing.sm)
        .padding(.bottom, Theme.Spacing.lg)
    }
    
    // MARK: - 功能对比表
    private var featureComparisonTable: some View {
        PlanCompare()
        .padding(.horizontal, Theme.Spacing.lg)
    }
    
    // MARK: - 订阅按钮
    private var subscribeButton: some View {
        VStack(spacing: 12) {
            SubscribeButton(
                title: "Subscribe",
                isLoading: isLoading,
                action: handleSubscribe
            )
        }
        .padding(.horizontal, Theme.Spacing.xl)
        .padding(.top, Theme.Spacing.lg)
    }
    
    // MARK: - 法律链接
    private var legalLinks: some View {
        HStack(spacing: 8) {
            Button(action: {
                // 打开服务条款
            }) {
                Text("Terms of Service")
                    .underline()
            }
            
            Text("|")
                .foregroundColor(.secondary)
            
            Button(action: {
                // 打开隐私政策
            }) {
                Text("Privacy Policy")
                    .underline()
            }
            
            Text("|")
                .foregroundColor(.secondary)
            
            Button(action: {
                // 恢复购买
            }) {
                Text("Restore Purchase")
                    .underline()
            }
        }
        .font(Typography.font(for: .caption, family: .quicksandRegular))
        .foregroundColor(.secondary)
        .padding(.top, Theme.Spacing.sm)
    }
    
    // MARK: - 订阅处理
    private func handleSubscribe() {
        isLoading = true
        
        // 模拟订阅处理
        DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
            isLoading = false
            // 处理订阅逻辑
        }
    }
}

#Preview {
    SubscribeView()
}
