#pragma once
#include <luna/CString.h>
#include <luna/Heap.h>
#include <luna/OwnedStringView.h>

class PathParser
{
  public:
    static Result<PathParser> create(const char* path);

    PathParser(PathParser&& other);
    PathParser(const PathParser&) = delete;

    ~PathParser();

    bool is_absolute() const
    {
        return *m_original == '/';
    }

    Result<OwnedStringView> basename();
    Result<OwnedStringView> dirname();

    Option<const char*> next();

  private:
    PathParser(const char* original, char* copy);

    const char* m_original { nullptr };
    char* m_copy { nullptr };
    bool m_already_called_next { false };
};