import SwiftUI

/// A simplified version of `WaveformStripShape` from `FeatureEditClip`.
/// This component renders waveform data as a smooth filled shape with selection highlight.
/// Unlike the full WaveformEditor version, this doesn't support zooming, scrolling,
/// or fine-scrubbing - it's optimized for simple playback visualization.
public struct SimpleWaveformShape: View {
    let waveformData: [Float]
    let width: CGFloat
    let height: CGFloat
    let selectionEnd: Double
    
    public init(
        waveformData: [Float],
        width: CGFloat,
        height: CGFloat,
        selectionEnd: Double
    ) {
        self.waveformData = waveformData
        self.width = width
        self.height = height
        self.selectionEnd = selectionEnd
    }
    
    public var body: some View {
        WaveformPath(
            waveformData: waveformData,
            width: width,
            height: height
        )
        .fill(Color.white)
        .frame(width: width, height: height)
    }
}

struct WaveformPath: Shape {
    let waveformData: [Float]
    let width: CGFloat
    let height: CGFloat
    
    func path(in rect: CGRect) -> Path {
        Path { path in
            guard !waveformData.isEmpty else { return }
            
            let maxAmplitude = waveformData.map(abs).max() ?? 1.0
            let stepX = width / CGFloat(waveformData.count)
            let midY = height / 2
            
            path.move(to: CGPoint(x: 0, y: midY))
            
            for i in 0..<waveformData.count {
                let x = CGFloat(i) * stepX
                let normalizedAmplitude = CGFloat(waveformData[i]) / CGFloat(maxAmplitude)
                let y = midY - (normalizedAmplitude * midY)
                path.addLine(to: CGPoint(x: x, y: y))
            }
            
            let lastX = CGFloat(waveformData.count - 1) * stepX
            path.addLine(to: CGPoint(x: lastX, y: midY))
            
            for i in (0..<waveformData.count).reversed() {
                let x = CGFloat(i) * stepX
                let normalizedAmplitude = CGFloat(waveformData[i]) / CGFloat(maxAmplitude)
                let y = midY + (normalizedAmplitude * midY)
                path.addLine(to: CGPoint(x: x, y: y))
            }
            
            path.closeSubpath()
        }
    }
}

