/*
 * API v1 Routes
 * -------------------------------------------------------------
 * Description here
 */
const index = {

    prefix: '/api/v1',

    middleware: [
        'auth:UserOnly',
    ],

    get: {
        '/token': [
            'controller::api:v1:Misc.get_token',
        ],

        // Get the file ref node config for the specified file ref
        '/files/:PageId/:NodeId/get/:FilesId': ['controller::api:v1:File.get_config'],

        // Download the specified file ID from the specified file ref node
        '/files/:PageId/:NodeId/get/:FilesId/:FileId': ['controller::api:v1:File.download'],

        // Get the data for the specified page
        '/page/:PageId': ['controller::api:v1:Page.get_page'],

        // Get the available versions of the given page
        '/page/:PageId/versions': ['controller::api:v1:Page.get_page_versions'],

        // Get the nodes present on the specified page
        '/page/:PageId/nodes': ['controller::api:v1:Page.get_nodes'],

        // Get the user's menu tree
        '/menu/items': ['controller::api:v1:Menu.get_items'],

        // Get the database ref node config for the specified database
        '/db/:PageId/:NodeId/get/:DatabaseId': ['controller::api:v1:FormDatabase.get_config'],

        // Get the column config records for the specified database
        '/db/:PageId/:NodeId/get/:DatabaseId/columns': [ 'controller::api:v1:FormDatabase.get_columns' ],

        // Get the row records for the specified database
        '/db/:PageId/:NodeId/get/:DatabaseId/data': [ 'controller::api:v1:FormDatabase.get_data' ],

        // Get the code ref node config for the specified code editor
        '/code/:PageId/:NodeId/get/:CodiumId': ['controller::api:v1:FormCode.get_config'],

        // Export the entire personal tree as HTML
        '/data/export/html': ['controller::Export.html_export'],

        '/search': ['controller::api:v1:Misc.get_search'],

        '/offline/prefetch': ['controller::api:v1:Offline.do_prefetch'],
    },

    post: {
        // Upload the file in the 'uploaded_file' key to the specified file ref node
        '/file/upload/:PageId/:NodeId/:FilesId': ['middleware::upload:UploadFile', 'controller::api:v1:File.save_upload'],

        // Create a new file ref node
        '/files/:PageId/:NodeId/create': ['controller::api:v1:File.create_config'],

        // Delete a file ref node and its files
        '/files/:PageId/:NodeId/delete/:FilesId': ['controller::api:v1:File.delete_group'],

        // Save the data for the specified page
        '/page/:PageId/save': ['controller::api:v1:Page.save_page'],

        // Save the node data for the specified page
        '/page/:PageId/nodes/save': ['controller::api:v1:Page.save_nodes'],

        '/page/:PageId/nodes/save_one': ['controller::api:v1:Page.save_node_to_page'],

        // Create a new page in the personal root
        '/page/create': ['controller::api:v1:Page.create_top_level'],

        // Create a new page as a child of the specified page
        '/page/create-child': ['controller::api:v1:Page.create_child'],

        // Delete the specified page
        '/page/delete/:PageId': ['controller::api:v1:Page.delete_page'],

        // Create a new database ref config
        '/db/:PageId/:NodeId/create': ['controller::api:v1:FormDatabase.create_new'],

        // Set the column configs for a database ref
        '/db/:PageId/:NodeId/set/:DatabaseId/columns': [ 'controller::api:v1:FormDatabase.set_columns' ],

        // Set the database name
        '/db/:PageId/:NodeId/set/:DatabaseId/Name': [ 'controller::api:v1:FormDatabase.set_name' ],

        // Delete the specified database ref
        '/db/:PageId/:NodeId/drop/:DatabaseId': [ 'controller::api:v1:FormDatabase.drop_database' ],

        // Set the row data for the specified database ref
        '/db/:PageId/:NodeId/set/:DatabaseId/data': ['controller::api:v1:FormDatabase.set_data'],

        // Create a new code ref config
        '/code/:PageId/:NodeId/create': ['controller::api:v1:FormCode.create_new'],

        // Set the data for the specified code ref
        '/code/:PageId/:NodeId/set/:CodiumId': ['controller::api:v1:FormCode.set_values'],

        // delete the specified code ref
        '/code/:PageId/:NodeId/delete/:CodiumId': ['controller::api:v1:FormCode.drop_code'],

        // re-sync data when an offline client goes back online
        '/offline/sync': ['controller::api:v1:Offline.do_sync'],
    },
}

module.exports = exports = index
