import apiClient from './client'
import type { Folder, FolderListItem, FolderCreate, FolderUpdate, FolderReorderRequest } from '@/types'

export const foldersApi = {
  async list(): Promise<FolderListItem[]> {
    const response = await apiClient.get<FolderListItem[]>('/folders')
    return response.data
  },

  async get(id: string): Promise<Folder> {
    const response = await apiClient.get<Folder>(`/folders/${id}`)
    return response.data
  },

  async create(data: FolderCreate): Promise<Folder> {
    const response = await apiClient.post<Folder>('/folders', data)
    return response.data
  },

  async update(id: string, data: FolderUpdate): Promise<Folder> {
    const response = await apiClient.put<Folder>(`/folders/${id}`, data)
    return response.data
  },

  async delete(id: string): Promise<void> {
    await apiClient.delete(`/folders/${id}`)
  },

  async reorder(folderIds: string[]): Promise<void> {
    await apiClient.post('/folders/reorder', {
      folder_ids: folderIds,
    } as FolderReorderRequest)
  },

  // Folder tree management
  async getTreeIds(folderId: string): Promise<string[]> {
    const response = await apiClient.get<string[]>(`/folders/${folderId}/trees`)
    return response.data
  },

  async addTree(folderId: string, treeId: string): Promise<void> {
    await apiClient.post(`/folders/${folderId}/trees`, { tree_id: treeId })
  },

  async removeTree(folderId: string, treeId: string): Promise<void> {
    await apiClient.delete(`/folders/${folderId}/trees/${treeId}`)
  },
}

export default foldersApi
