// Copyright 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the “License”);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// <https://apache.org/licenses/LICENSE-2.0>.
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an “AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

const path = require('path');

const execa = require('execa');

const { Installer } = require('../../shared/installer.js');
const unzip = require('../../shared/unzip.js');

const extract = ({ filePath, engine, os }) => {
	return new Promise(async (resolve, reject) => {
		const tmpPath = path.dirname(filePath);
		await unzip({
			from: filePath,
			to: tmpPath,
		});
		const installer = new Installer({
			engine,
			path: tmpPath,
		});
		if (os.startsWith('win')) {
			installer.installBinary({ 'xst.exe': 'xs.exe' }, { symlink: true });
		} else {
			installer.installBinary({ 'xst': 'xs' }, { symlink: true });
		}
		resolve();
	});
};

module.exports = extract;

// Copyright 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the “License”);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// <https://apache.org/licenses/LICENSE-2.0>.
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an “AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

const path = require('path');

const execa = require('execa');

const { Installer } = require('../../shared/installer.js');
const unzip = require('../../shared/unzip.js');

const extract = ({ filePath, engine, os }) => {
	return new Promise(async (resolve, reject) => {
		const tmpPath = path.dirname(filePath);
		await unzip({
			from: filePath,
			to: tmpPath,
		});
		const installer = new Installer({
			engine,
			path: tmpPath,
		});
		if (os.startsWith('win')) {
			installer.installBinary(
				{ 'xst.exe': 'xs.exe' },
				{ symlink: false }
			);
			installer.installScript({
				name: 'xs.cmd',
				generateScript: (targetPath) => {
					return `
						@echo off
						"${targetPath}\\xs.exe" %*
					`;
				}
			});
		} else {
			installer.installBinary({ 'xst': 'xs' }, { symlink: true });
		}
		resolve();
	});
};

module.exports = extract;

Fix XS installation on Windows