import SwiftUI

/// 设置页面视图
struct SettingsView: View {
    // MARK: - 属性
    
    /// 环境变量 - 用于dismiss视图
    @Environment(\.dismiss) private var dismiss
    
    /// 状态 - 控制视图显示/隐藏
    @Binding var isPresented: Bool
    
    // MARK: - 动画配置
    
    /// 动画配置
    private let animation = Animation.spring(
        response: 0.6,        // 响应时间
        dampingFraction: 0.9,  // 阻尼系数
        blendDuration: 0.8     // 混合时间
    )
    
    // MARK: - 主体视图
    
    var body: some View {
        VStack(spacing: 0) {
            // 自定义导航栏
            HStack {
                // 返回按钮
                Button(action: {
                    withAnimation(animation) {
                        isPresented = false
                    }
                }) {
                    HStack(spacing: 4) {
                        Image(systemName: "chevron.left")
                            .font(.system(size: 16, weight: .medium))
                            .foregroundColor(.blue)
                    }
                }
                
                Spacer()
                
                // 标题
                Text("Setting")
                    .font(.headline)
                
                Spacer()
                
                // 用于平衡布局的透明视图
                Color.clear
                    .frame(width: 44, height: 44)
            }
            .padding(.horizontal,16)
            .padding(.vertical, 8)
            
            // 设置项列表
            List {
                
                // 账号与安全
                settingRow(
                    icon: "person.crop.circle",
                    title: "Account & Security",
                    action: {}
                )
                
                // 权限管理
                settingRow(
                    icon: "lock.shield",
                    title: "Permission Management",
                    action: {}
                )
                
                // 支持与服务
                settingRow(
                    icon: "questionmark.circle",
                    title: "Support & Service",
                    action: {}
                )
                
                // 关于我们
                settingRow(
                    icon: "info.circle",
                    title: "About Us",
                    action: {}
                )
            }
            // 设置列表样式为普通样式（无分组效果）
            .listStyle(PlainListStyle())
            // 隐藏所有行的分割线
            .listRowSeparator(.hidden)
            // 移除列表行的内边距
            .listRowInsets(EdgeInsets())
            .background(Color(.systemGroupedBackground))
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .background(Color(.systemGroupedBackground))
        // 设置水平尺寸类别为常规宽度（regular），用于支持分屏和不同设备尺寸的布局
        .environment(\.horizontalSizeClass, .regular)
    }
    
    // MARK: - 私有方法
    
    /// 配置TableView外观
    private func configureTableView() {
        // 移除列表底部分隔线
        UITableView.appearance().tableFooterView = UIView()
        // 移除列表顶部分隔线
        UITableView.appearance().tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: CGFloat.leastNonzeroMagnitude))
        // 移除分隔线缩进
        UITableView.appearance().separatorInset = .zero
        // 移除列表顶部额外间距
        UITableView.appearance().contentInset = .zero
    }
    
    /// 创建设置项行视图
    /// - Parameters:
    ///   - icon: 图标名称
    ///   - title: 标题
    ///   - action: 点击动作
    /// - Returns: 返回设置项行视图
    private func settingRow(icon: String, title: String, action: @escaping () -> Void) -> some View {
        Button(action: action) {
            HStack {
                // 左侧图标
                Image(systemName: icon)
                    .font(.system(size: 24))
                    .foregroundColor(.gray)
                    .frame(width: 40)
                
                // 标题
                Text(title)
                    .foregroundColor(.primary)
                
                Spacer()
                
                // 右侧箭头
                Image(systemName: "chevron.right")
                    .font(.system(size: 14))
                    .foregroundColor(.gray)
            }
            .padding(.vertical, 6)  // 减少垂直内边距
            .padding(.horizontal, 12)
            .background(Color(.systemGroupedBackground))
        }
        .buttonStyle(PlainButtonStyle())
        .listRowBackground(Color(.systemGroupedBackground))
        .listRowSeparator(.hidden)
    }
}

// MARK: - 预览
#Preview {
    NavigationView {
        SettingsView(isPresented: .constant(true))
    }
}
