import SwiftUI

struct WorkspacesView: View {
    @State private var selectedTab: String = "Workspaces"
    @State private var searchText: String = ""
    @StateObject private var workspaceManager = WorkspaceManager.shared

    let tabs = ["Songs", "Playlists", "Workspaces", "Personas", "Hooks", "History", "Archive"]

    let onBackTap: () -> Void
    let onUploadTap: () -> Void
    let onSearchTap: () -> Void
    let onNewWorkspaceTap: () -> Void
    let onWorkspaceTap: (LibraryWorkspace) -> Void
    let onWorkspaceMenuTap: (LibraryWorkspace) -> Void

    init(
        onBackTap: @escaping () -> Void = {},
        onUploadTap: @escaping () -> Void = {},
        onSearchTap: @escaping () -> Void = {},
        onNewWorkspaceTap: @escaping () -> Void = {},
        onWorkspaceTap: @escaping (LibraryWorkspace) -> Void = { _ in },
        onWorkspaceMenuTap: @escaping (LibraryWorkspace) -> Void = { _ in }
    ) {
        self.onBackTap = onBackTap
        self.onUploadTap = onUploadTap
        self.onSearchTap = onSearchTap
        self.onNewWorkspaceTap = onNewWorkspaceTap
        self.onWorkspaceTap = onWorkspaceTap
        self.onWorkspaceMenuTap = onWorkspaceMenuTap
    }
    
    var body: some View {
        workspacesContent
    }
    
    private var workspacesContent: some View {
        VStack(spacing: 0){
            ScrollView {
                workspaceContent
                    .padding(.horizontal, 12)
                    .padding(.top, 72)
            }
        }
        .background(Constants.Colors.Background.secondary)
    }


    
    private var workspaceContent: some View {
        VStack(spacing: 16) {
            // Search bar
            SearchBar(text: $searchText, placeholder: "Search")

            // New Chat button
            Button(action: onNewWorkspaceTap) {
                HStack(spacing: 12) {
                    ZStack {
                        RoundedRectangle(cornerRadius: 8)
                            .fill(Color.white.opacity(0.04))
                            .frame(width: 60, height: 50)

                        Image("Icon/plus")
                            .resizable()
                            .frame(width: 26, height: 26)
                            .foregroundColor(Constants.Colors.Foreground.primary)
                    }

                    VStack(alignment: .center, spacing: 4) {
                        Text("New Chat")
                            .font(Constants.Typography.small.weight(.medium))
                            .foregroundColor(Constants.Colors.Foreground.primary)
                            .tracking(0.28)
                    }
                    .frame(height: 50)

                    Spacer()
                }
            }
            .buttonStyle(PlainButtonStyle())
            
            // Workspace list
            ForEach(workspaceManager.workspaces, id: \.id) { workspace in
                WorkspaceCell(
                    workspace: workspace,
                    onTap: {
                        onWorkspaceTap(workspace)
                    },
                    onMenuTap: { onWorkspaceMenuTap(workspace) }
                )
            }
        }
    }
}

struct LibraryWorkspace: Identifiable, Codable, Hashable {
    let id: String
    let name: String
    let songCount: Int
    let lastModified: Date
    let imageId: String

    // Helper function to format date as friendly timestamp
    var friendlyTimestamp: String {
        let now = Date()
        let timeInterval = now.timeIntervalSince(lastModified)

        let minutes = Int(timeInterval / 60)
        let hours = Int(timeInterval / 3600)
        let days = Int(timeInterval / 86400)
        let months = Int(timeInterval / 2592000) // Approximate 30 days
        let years = Int(timeInterval / 31536000) // Approximate 365 days

        if minutes < 1 {
            return "now"
        } else if minutes < 60 {
            return "\(minutes)m ago"
        } else if hours < 24 {
            return "\(hours)h ago"
        } else if days < 30 {
            return "\(days)d ago"
        } else if months < 12 {
            return "\(months)mo ago"
        } else {
            return "\(years)y ago"
        }
    }
}

private struct WorkspaceCell: View {
    let workspace: LibraryWorkspace
    let onTap: () -> Void
    let onMenuTap: () -> Void
    
    var body: some View {
        Button(action: onTap) {
            HStack(spacing: 16) {
                // Workspace thumbnail
                Image(workspace.imageId)
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .frame(width: 60, height: 50)
                    .clipShape(RoundedRectangle(cornerRadius: 8))
                
                // Workspace info
                VStack(alignment: .leading, spacing: 4) {
                    Text(workspace.name)
                        .font(Constants.Typography.small.weight(.medium))
                        .foregroundColor(Constants.Colors.Foreground.primary)
                        .tracking(0.28)
                        .frame(maxWidth: .infinity, alignment: .leading)
                    
                    HStack(spacing: 4) {
                        Text("\(workspace.songCount) songs")
                            .font(Constants.Typography.xSmallRegular)
                            .foregroundColor(Constants.Colors.Foreground.secondary)
                            .tracking(0.24)

                        Text("•")
                            .font(Constants.Typography.xSmallRegular)
                            .foregroundColor(Constants.Colors.Foreground.secondary)

                        Text(workspace.friendlyTimestamp)
                            .font(Constants.Typography.xSmallRegular)
                            .foregroundColor(Constants.Colors.Foreground.secondary)
                            .tracking(0.24)

                        Spacer()
                    }
                }
                
                // Right section - Chat history and More menu buttons
                    // More menu button
                    Button(action: onMenuTap) {
                        Image("Icon/more-horizontal")
                            .resizable()
                            .renderingMode(.template)
                            .frame(width: 24, height: 24)
                            .foregroundColor(Constants.Colors.Foreground.inactive)
                            .opacity(0.9)
                    }
                    .buttonStyle(PlainButtonStyle())
            }
        }
        .buttonStyle(PlainButtonStyle())
    }
}

#Preview {
    WorkspacesView(
        onBackTap: { print("Back tapped") },
        onUploadTap: { print("Upload tapped") },
        onSearchTap: { print("Search tapped") },
        onNewWorkspaceTap: { print("New workspace tapped") },
        onWorkspaceTap: { workspace in print("Workspace tapped: \(workspace.name)") },
        onWorkspaceMenuTap: { workspace in print("Menu tapped for: \(workspace.name)") }
    )
    .preferredColorScheme(.dark)
}
