// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

package dirfs

import (
	"context"
	"os"

	"tailscale.com/drive/driveimpl/shared"
)

// Mkdir implements webdav.FileSystem. All attempts to Mkdir a directory that
// already exists will succeed. All other attempts will fail with
// os.ErrPermission.
func (dfs *FS) Mkdir(ctx context.Context, name string, perm os.FileMode) error {
	nameWithoutStaticRoot, isStaticRoot := dfs.trimStaticRoot(name)
	if isStaticRoot || shared.IsRoot(name) {
		// root directory already exists, consider this okay
		return nil
	}

	child := dfs.childFor(nameWithoutStaticRoot)
	if child != nil {
		// child already exists, consider this okay
		return nil
	}

	return &os.PathError{Op: "mkdir", Path: name, Err: os.ErrPermission}
}
