import Foundation import SwiftUI #if canImport(LCEssentials) import LCEssentials #endif struct PizzaFlavorAddonsSheet: View { let flavor: StoreCatalogProduct @Binding var quantities: [String: Int] @Environment(\.dismiss) var dismiss var body: some View { LCENavigationView { content } .setLeftButton(image: AnyView(AppBackButtonIcon())) { dismiss() } .setTitle(text: Text("Adicionais").font(AppTypography.heading2).foregroundStyle(AppColors.textPrimary)) } private var content: some View { ScrollView(showsIndicators: false) { VStack(alignment: .leading, spacing: 12) { Text(flavor.name) .font(AppTypography.heading2) .foregroundStyle(AppColors.textPrimary) if flavor.addonGroups.isEmpty { Text("Este sabor não possui adicionais.") .font(AppTypography.body) .foregroundStyle(AppColors.textMuted) } else { ForEach(flavor.addonGroups) { group in VStack(alignment: .leading, spacing: 10) { Text(group.name) .font(AppTypography.heading3) .foregroundStyle(AppColors.textPrimary) ForEach(group.items) { item in HStack(spacing: 10) { VStack(alignment: .leading, spacing: 4) { Text(item.name) .font(AppTypography.body) .foregroundStyle(AppColors.textPrimary) Text("+ \(formatCurrency(item.price ?? 0))") .font(.caption) .foregroundStyle(AppColors.textMuted) } Spacer() HStack(spacing: 8) { Button(action: { decrement(item.id) }) { Image(systemName: "minus") .font(.system(size: 12, weight: .bold)) .foregroundStyle(AppColors.textPrimary) .frame(width: 26, height: 26) .background(AppColors.brandSoft) .clipShape(Circle()) } .buttonStyle(.plain) .disabled((quantities[item.id] ?? 0) <= 0) Text("\(quantities[item.id] ?? 0)") .font(AppTypography.heading3) .foregroundStyle(AppColors.textPrimary) .frame(minWidth: 18) Button(action: { increment(item.id) }) { Image(systemName: "plus") .font(.system(size: 12, weight: .bold)) .foregroundStyle(AppColors.textPrimary) .frame(width: 26, height: 26) .background(AppColors.tertiary) .clipShape(Circle()) } .buttonStyle(.plain) } } } } .padding(12) .background(AppColors.surface) .clipShape(RoundedRectangle(cornerRadius: AppLayout.radiusLG, style: .continuous)) } } } .padding(20) } .background(AppColors.backgroundLight.ignoresSafeArea()) .appHiddenNavigationBar() .navigationBarBackButtonHidden(true) } private func increment(_ addonId: String) { quantities[addonId, default: 0] += 1 } private func decrement(_ addonId: String) { let current = quantities[addonId] ?? 0 if current <= 1 { quantities.removeValue(forKey: addonId) } else { quantities[addonId] = current - 1 } } private func formatCurrency(_ value: Double) -> String { String(format: "R$ %.2f", value).replacingOccurrences(of: ".", with: ",") } }