import path from 'path';

export { path };

export function basenameAny(value, fallback = '') {
  const normalized = String(value || fallback || '').replace(/\\/g, '/');
  return path.posix.basename(normalized);
}

export function extnameAny(value) {
  return path.extname(basenameAny(value)).toLowerCase();
}

export function nameWithoutExtensionAny(value, fallback = '') {
  return path.parse(basenameAny(value, fallback)).name;
}

export function sanitizeFileName(name, fallback = 'asset.bin') {
  return basenameAny(name, fallback)
    .replace(/[/\\?%*:|"<>]/g, '-')
    .replace(/\s+/g, ' ')
    .trim()
    .slice(0, 180) || fallback;
}

export function normalizePackagePath(value, fallbackName = '') {
  const clean = String(value || fallbackName || '')
    .replace(/\\/g, '/')
    .split('/')
    .filter((part) => part && part !== '.' && part !== '..')
    .join('/');
  return clean.slice(0, 500);
}

export function isPathInside(parentDir, candidatePath) {
  const parent = path.resolve(parentDir);
  const candidate = path.resolve(candidatePath);
  const relative = path.relative(parent, candidate);
  return relative === '' || (relative && !relative.startsWith('..') && !path.isAbsolute(relative));
}
