import SwiftUI
import AudioCore

/// Per-part detail: volume, take list with active toggle / nudge / delete.
struct TakeSheet: View {
    @Bindable var model: ProjectModel
    let partName: String
    @Environment(\.dismiss) private var dismiss

    var body: some View {
        NavigationStack {
            List {
                Section("Volume") {
                    Slider(
                        value: Binding(
                            get: { Double(model.volumes[partName] ?? 1.0) },
                            set: { model.volumes[partName] = Float($0) }
                        ),
                        in: 0...1.5
                    ) {
                        Text("Volume")
                    }
                }

                Section("Takes") {
                    let takes = model.takes(forPart: partName)
                    if takes.isEmpty {
                        Text("No takes yet — tap the record button on this part's chip to sing it.")
                            .font(.callout)
                            .foregroundStyle(.secondary)
                    }
                    ForEach(takes) { take in
                        VStack(alignment: .leading, spacing: 6) {
                            HStack {
                                Toggle(isOn: Binding(
                                    get: { take.isActive },
                                    set: { model.setActiveTake(take, active: $0) }
                                )) {
                                    VStack(alignment: .leading, spacing: 2) {
                                        Text(take.createdAt.formatted(date: .abbreviated, time: .shortened))
                                            .font(.subheadline)
                                        Text("tempo ×\(take.recordedTempoMultiplier, specifier: "%.2f") · m. \(take.recordedMeasureStart + 1)–\(take.recordedMeasureEnd + 1)")
                                            .font(.caption2)
                                            .foregroundStyle(.secondary)
                                    }
                                }
                            }
                            if take.isActive {
                                HStack(spacing: 12) {
                                    Text("Nudge")
                                        .font(.caption)
                                        .foregroundStyle(.secondary)
                                    Button {
                                        model.nudgeTake(take, byMs: -5)
                                    } label: {
                                        Image(systemName: "minus.circle")
                                    }
                                    Text("\(take.manualNudgeMs, specifier: "%+.0f") ms")
                                        .font(.caption.monospacedDigit())
                                        .frame(width: 56)
                                    Button {
                                        model.nudgeTake(take, byMs: 5)
                                    } label: {
                                        Image(systemName: "plus.circle")
                                    }
                                    Spacer()
                                    Text("earlier / later")
                                        .font(.caption2)
                                        .foregroundStyle(.tertiary)
                                }
                                .buttonStyle(.borderless)
                            }
                        }
                        .swipeActions {
                            Button(role: .destructive) {
                                model.deleteTake(take)
                            } label: {
                                Label("Delete", systemImage: "trash")
                            }
                        }
                    }
                }
            }
            .navigationTitle(partName)
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .topBarTrailing) {
                    Button("Done") { dismiss() }
                }
            }
        }
    }
}
