/*
 * path.ts
 *
 * Copyright (C) 2023 by Posit Software, PBC
 * Copyright (c) Microsoft Corporation. All rights reserved.
 *
 * Unless you have received this program directly from Posit Software pursuant
 * to the terms of a commercial license agreement with Posit Software, then
 * this program is licensed to you under the terms of version 3 of the
 * GNU Affero General Public License. This program is distributed WITHOUT
 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
 *
 */

import * as path from 'path';
import { URI, Utils } from 'vscode-uri';
import { Schemes } from './schemes';

export function isParentDir(parent: URI, maybeChild: URI): boolean {
  if (parent.scheme === maybeChild.scheme && parent.authority === maybeChild.authority) {
    const relative = path.relative(parent.path, maybeChild.path);
    return !relative.startsWith('..');
  }
  return false;
}

export function computeRelativePath(fromDoc: URI, toDoc: URI, preferDotSlash = false): string | undefined {
  if (fromDoc.scheme === toDoc.scheme && fromDoc.scheme !== Schemes.untitled) {
    const rootDir = Utils.dirname(fromDoc);
    let newLink = path.posix.relative(rootDir.path, toDoc.path);
    if (preferDotSlash && !(newLink.startsWith('../') || newLink.startsWith('..\\'))) {
      newLink = './' + newLink;
    }
    return newLink;
  }

  return undefined;
}
