import APIClient
import ComponentLibrary
import SwiftUI

struct ComparisonTableView: View {
    let titles: [String]
    let items: [FeatureRowResponse]

    var body: some View {
        ScrollView(.horizontal) {
            VStack(spacing: 0) {
                HStack(spacing: 0) {
                    Color.clear
                        .containerRelativeFrame(.horizontal, count: 20, span: 9, spacing: 0)

                    ForEach(titles, id: \.self) { title in
                        Divider()
                            .foregroundStyle(Color.SemanticV1.backgroundTertiary)
                            .opacity(0.5)
                        Text(title)
                            .typographyV1(.bodyMedium.ppNeueMontrealBold())
                            .frame(maxWidth: .infinity)
                            .multilineTextAlignment(.center)
                            .padding(16)
                    }
                }
                .frame(height: 40)

                Divider()
                    .foregroundStyle(Color.SemanticV1.backgroundTertiary)
                    .opacity(0.5)

                ForEach(items.indices, id: \.self) { itemIndex in
                    let item = items[itemIndex]

                    HStack(spacing: 0) {
                        Text(item.featureName.text)
                            .typographyV1(.subtitleMedium)
                            .padding(.horizontal, 8)
                            .frame(maxWidth: .infinity, alignment: .leading)
                            .lineLimit(2)
                            .multilineTextAlignment(.leading)
                            .minimumScaleFactor(0.75)
                            .fixedSize(horizontal: false, vertical: true)
                            .padding(16)
                            .containerRelativeFrame(.horizontal, count: 20, span: 9, spacing: 0)

                        ForEach(item.values.indices, id: \.self) { index in
                            Divider()
                                .foregroundStyle(Color.SemanticV1.backgroundTertiary)
                                .opacity(0.5)

                            itemValueView(value: item.values[index])
                                .typographyV1(.bodyMedium)
                                .padding(16)
                                .lineLimit(2)
                                .minimumScaleFactor(0.75)
                                .frame(maxWidth: .infinity)
                        }
                    }

                    Divider()
                }
            }
        }
        .scrollIndicators(.hidden)
        .scrollClipDisabled()
    }

    @ViewBuilder
    func itemValueView(value: FeatureRowResponse.Value) -> some View {
        switch value {
        case .iconFeatureValueResponse(let response):
            if let icon = response.icon {
                switch icon {
                case .check:
                    Image.Icon.checkV1
                        .foregroundStyle(.green)
                case .lock:
                    Image.Icon.lockV1
                        .foregroundStyle(.secondary)
                }
            } else {
                Text("")
            }
        case .textFeatureValueResponse(let response):
            Text(response.text)
        }
    }
}
