#include <string>
#include <vector>
#include <sstream>

namespace FileSystem2 {

// 拼接多个路径组件，自动处理斜杠
std::string JoinPath(const std::string& a, const std::string& b) {
    if (a.empty()) return b;
    if (b.empty()) return a;

    // 如果 a 以 '/' 结尾，或 b 以 '/' 开头，避免重复
    if (a.back() == '/' && b.front() == '/') {
        return a + b.substr(1);
    } else if (a.back() != '/' && b.front() != '/') {
        return a + "/" + b;
    } else {
        return a + b;
    }
}

// 支持多个参数的版本（C++11 可变参数模板）
template<typename... Args>
std::string JoinPath(const std::string& first, const Args&... rest) {
    std::string result = first;
    std::initializer_list<std::string> paths = { rest... };
    for (const auto& p : paths) {
        result = JoinPath(result, p);
    }
    return result;
}
// 获取文件名（含扩展名）
std::string GetFilename(const std::string& path) {
    size_t pos = path.find_last_of('/');
    if (pos == std::string::npos) return path;
    return path.substr(pos + 1);
}

// 获取不含扩展名的文件名
std::string GetStem(const std::string& path) {
    std::string filename = GetFilename(path);
    size_t pos = filename.find_last_of('.');
    if (pos == std::string::npos) return filename;
    return filename.substr(0, pos);
}

// 获取扩展名（含点）
std::string GetExtension(const std::string& path) {
    std::string filename = GetFilename(path);
    size_t pos = filename.find_last_of('.');
    if (pos == std::string::npos) return "";
    return filename.substr(pos);
}

// 获取父目录
std::string GetParentPath(const std::string& path) {
    size_t pos = path.find_last_of('/');
    if (pos == std::string::npos) return ".";
    if (pos == 0) return "/"; // 根目录
    return path.substr(0, pos);
}

}