import SwiftUI
import SecretKit

struct EmptyStoreView: View {

    @ObservedObject var store: AnySecretStore
    @Binding var activeSecret: AnySecret.ID?

    var body: some View {
        if store is AnySecretStoreModifiable {
            NavigationLink(destination: EmptyStoreModifiableView(), tag: Constants.emptyStoreModifiableTag, selection: $activeSecret) {
                Text("empty_store_modifiable_title")
            }
        } else {
            NavigationLink(destination: EmptyStoreImmutableView(), tag: Constants.emptyStoreTag, selection: $activeSecret) {
                Text("empty_store_nonmodifiable_title")
            }
        }
    }
}

extension EmptyStoreView {
    
    enum Constants {
        static let emptyStoreModifiableTag: AnyHashable = "emptyStoreModifiableTag"
        static let emptyStoreTag: AnyHashable = "emptyStoreTag"
    }

}

struct EmptyStoreImmutableView: View {
    
    var body: some View {
        VStack {
            Text("empty_store_nonmodifiable_title").bold()
            Text("empty_store_nonmodifiable_description")
            Text("empty_store_nonmodifiable_supported_key_types")
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }
    
}

struct EmptyStoreModifiableView: View {
    
    var body: some View {
        GeometryReader { windowGeometry in
            VStack {
                GeometryReader { g in
                    Path { path in
                        path.move(to: CGPoint(x: g.size.width / 2, y: g.size.height))
                        path.addCurve(to:
                            CGPoint(x: g.size.width * (3/4), y: g.size.height * (1/2)), control1:
                            CGPoint(x: g.size.width / 2, y: g.size.height * (1/2)), control2:
                            CGPoint(x: g.size.width * (3/4), y: g.size.height * (1/2)))
                        path.addCurve(to:
                            CGPoint(x: g.size.width - 13, y: 0), control1:
                            CGPoint(x: g.size.width - 13 , y: g.size.height * (1/2)), control2:
                            CGPoint(x: g.size.width - 13, y: 0))
                    }.stroke(style: StrokeStyle(lineWidth: 5, lineCap: .round))
                    Path { path in
                        path.move(to: CGPoint(x: g.size.width - 23, y: 0))
                        path.addLine(to: CGPoint(x: g.size.width - 13, y: -10))
                        path.addLine(to: CGPoint(x: g.size.width - 3, y: 0))
                    }.fill()
                }.frame(height: (windowGeometry.size.height/2) - 20).padding()
                Text("empty_store_modifiable_click_here_title").bold()
                Text("empty_store_modifiable_click_here_description")
                Spacer()
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
}

#if DEBUG

struct EmptyStoreModifiableView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            EmptyStoreImmutableView()
            EmptyStoreModifiableView()
        }
    }
}

#endif