import SwiftUI

struct PostImageView: View {

    @ObservedObject
    var image: FileResource

    var body: some View {
        if let preview = image.imageToDisplay {
            preview
                .resizable()
                .aspectRatio(contentMode: .fill)
                .frame(maxWidth: 300, maxHeight: 200)
                .cornerRadius(8)
        } else if image.type.isImage {
            VStack {
                Image(systemSymbol: .exclamationmarkTriangle)
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(height: 100)
                Text(image.identifier)
                    .font(.title)
                Text("Failed to load image")
                    .font(.body)
            }
            .frame(width: 300, height: 200)
            .background(Color.gray)
            .cornerRadius(8)
        } else if image.type.isVideo {
            VStack {
                Image(systemSymbol: .film)
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(height: 100)
                Text(image.identifier)
                    .font(.title)
                Button("Generate preview") {
                    generateVideoPreview(image)
                }
                .font(.body)
            }
            .frame(width: 300, height: 200)
            .background(Color.gray)
            .cornerRadius(8)
        } else {
            VStack {
                Image(systemSymbol: .exclamationmarkTriangle)
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(height: 100)
                Text(image.identifier)
                    .font(.title)
                Text("Invalid media type")
                    .font(.body)
            }
            .frame(width: 300, height: 200)
            .background(Color.gray)
            .cornerRadius(8)
        }
    }

    private func generateVideoPreview(_ image: FileResource) {
        image.createVideoThumbnail()
    }
}
