#ifndef DIRECTORIES_HPP
#define DIRECTORIES_HPP

#include <string>

namespace dropshell {

    // all functions return empty string on failure

    //------------------------------------------------------------------------------------------------
    // local user config directories
    
    // ~/.config/dropshell/dropshell.json
    
    // server_definition_path
    //    |-- <server_name>
    //        |-- server.json
    //        |-- services
    //            |-- <service_name>
    //                |-- service.env
    //                |-- .template_info.env
    //                |-- (...other config files for specific server&service...)
    
    // backup path
    //    |-- katie-_-squashkiwi-_-squashkiwi-test-_-2025-04-28_21-23-59.tgz
 
    // temp files path

    // template cache path
    //    |-- templates
    //    |   |-- <template_name>.json
    //    |   |-- <template_name>
    //    |       |-- (...script files...)
    //    |       |-- _default.env
    //    |       |-- config
    //    |           |-- service.env
    //    |           |-- .template_info.env
    //    |           |-- (...other service config files...)
    //    |-- remote_versions
    //    |   |-- server_name-service_name.json

    namespace localfile {
        // ~/.config/dropshell/dropshell.json
        std::string dropshell_json();
        std::string server_json(const std::string &server_name);
        std::string service_env(const std::string &server_name, const std::string &service_name);
        std::string template_info_env(const std::string &server_name, const std::string &service_name);
    } // namespace localfile

    namespace localpath {
        std::string server(const std::string &server_name);
        std::string service(const std::string &server_name, const std::string &service_name);

        std::string remote_versions(const std::string &server_name, const std::string &service_name);

        std::string local_bin();
        std::string current_user_home();
    } // namespace local


    //------------------------------------------------------------------------------------------------
    // remote paths
    // DROPSHELL_DIR
    //   |-- backups
    //   |-- services
    //       |-- service name
    //           |-- config
    //               |-- service.env
    //           |-- template
    //               |-- (script files)
    //               |-- config
    //                   |-- service.env
    //                   |-- (other config files for specific server&service)

    namespace remotefile {
        std::string service_env(const std::string &server_name, const std::string &service_name);
    } // namespace remotefile

    namespace remotepath {
        std::string DROPSHELL_DIR(const std::string &server_name);
        std::string services(const std::string &server_name);
        std::string service(const std::string &server_name, const std::string &service_name);
        std::string service_config(const std::string &server_name, const std::string &service_name);
        std::string service_template(const std::string &server_name, const std::string &service_name);
        std::string backups(const std::string &server_name);
    } // namespace remotepath

    //------------------------------------------------------------------------------------------------
    // utility functions
    std::string get_parent(const std::string &path);

} // namespace dropshell

#endif // DIRECTORIES_HPP
