import i18n from 'i18next' ;
import { isMac , isWindows , hasDuplicates } from '../util' ;
const { sep : pathSep , join : pathJoin , normalize : pathNormalize } = window . require ( 'path' ) ;
const isDev = window . require ( 'electron-is-dev' ) ;
// eslint-disable-next-line import/prefer-default-export
export function getOutSegError ( { fileNames , filePath , outputDir } ) {
let error ;
// eslint-disable-next-line no-restricted-syntax
for ( const fileName of fileNames ) {
if ( ! filePath ) {
error = 'No file path' ;
break ;
}
const invalidChars = [ pathSep ] ;
// Colon is invalid on windows https://github.com/mifi/lossless-cut/issues/631 and on MacOS, but not Linux https://github.com/mifi/lossless-cut/issues/830
if ( isMac || isWindows ) invalidChars . push ( ':' ) ;
const outPath = pathNormalize ( pathJoin ( outputDir , fileName ) ) ;
const sameAsInputPath = outPath === pathNormalize ( filePath ) ;
const windowsMaxPathLength = 259 ;
const shouldCheckPathLength = isWindows || isDev ;
if ( fileName . length === 0 ) {
error = i18n . t ( 'At least one resulting file name has no length' ) ;
break ;
}
if ( invalidChars . some ( ( c ) => fileName . includes ( c ) ) ) {
error = i18n . t ( 'At least one resulting file name contains invalid characters' ) ;
break ;
}
if ( sameAsInputPath ) {
error = i18n . t ( 'At least one resulting file name is the same as the input path' ) ;
break ;
}
if ( shouldCheckPathLength && outPath . length >= windowsMaxPathLength ) {
error = i18n . t ( 'At least one resulting file will have a too long path' ) ;
break ;
}
}
if ( error != null ) return error ;
if ( hasDuplicates ( fileNames ) ) return i18n . t ( 'Output file name template results in duplicate file names (you are trying to export multiple files with the same name.)' ) ;
return undefined ;
}