import ComponentLibrary
import ComposableArchitecture
import Foundation
import SwiftUI

struct AnnounceAnimatedCardStack: View {
    @Bindable var store: StoreOf<BrandedAlertAnnounce>
    let imageNames: [String]

    init(store: StoreOf<BrandedAlertAnnounce>, imageNames: [String]) {
        self.store = store
        self.imageNames = imageNames
    }

    var body: some View {
        ZStack {
            AnnounceSlideImage(
                isAtFinalPostion: $store.areSlidingElementsShown,
                image: Image.Assets.named(imageNames[0]),
                startPosition: Constants.startPosition,
                endPosition: .init(x: .zero, y: 50.0),
                startRotation: .zero,
                endRotation: 5.0
            )
            .animation(.easeInOut(duration: Constants.animationDuration).delay(0.2), value: store.areSlidingElementsShown)

            AnnounceSlideImage(
                isAtFinalPostion: $store.areSlidingElementsShown,
                image: Image.Assets.named(imageNames[1]),
                startPosition: Constants.startPosition,
                endPosition: .init(x: -50.0, y: 125.0),
                startRotation: .zero,
                endRotation: -20.0
            )
            .animation(.easeInOut(duration: Constants.animationDuration).delay(0.4), value: store.areSlidingElementsShown)

            AnnounceSlideImage(
                isAtFinalPostion: $store.areSlidingElementsShown,
                image: Image.Assets.named(imageNames[2]),
                startPosition: Constants.startPosition,
                endPosition: .init(x: 50.0, y: 150.0),
                startRotation: .zero,
                endRotation: 10.0
            )
            .animation(.easeOut(duration: Constants.animationDuration).delay(0.6), value: store.areSlidingElementsShown)
        }
    }
}

private extension AnnounceAnimatedCardStack {
    enum Constants {
        static let animationDuration: TimeInterval = 1.0
        static let startPosition: CGPoint = .init(x: .zero, y: 500.0)
    }
}
