var fs = require('fs');
var path = require('path');
var webpack = require('webpack');
var pkg = require('./package');

// replaceVersion
var replaceVersion = function () {
    var filePath = path.resolve(__dirname, 'src/cos.js');
    var content = fs.readFileSync(filePath).toString();
    if (content) {
        var newContent = content.replace(/(COS\.version) *= *['"]\d+\.\d+\.\d+['"];/, "$1 = '" + pkg.version + "';");
        if (newContent !== content) {
            fs.writeFileSync(filePath, newContent);
            console.log('cos.js version updated.');
        }
    }
};
var replaceDevCode = function (list) {
    list.forEach(function (fileName) {
        var filePath = path.resolve(__dirname, fileName);
        var content = fs.readFileSync(filePath).toString();
        var newContent = content;
        newContent = newContent.replace(/https:\/\/\w+\.com\/[\w\-]+\/server\//, 'https://example.com/');
        newContent = newContent.replace(/test-125\d{7}/, 'test-1250000000');
        newContent = newContent.replace(/'proxy' => 'http:\/\/[^']+',/, "'proxy' => '',");
        newContent = newContent.replace(/proxy: 'http:\/\/[^']+',/, "proxy: '',");
        newContent = newContent.replace(/AKID\w+/, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
        newContent = newContent.replace(/'secretKey' => '[^']+',/, "'secretKey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',");
        newContent = newContent.replace(/secretKey: '[^']+',/, "secretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',");
        newContent = newContent.replace(/'allowActions' *=> *array\([^)]+\)/, `'allowActions' => array(
        // 所有 action 请看文档 https://cloud.tencent.com/document/product/436/31923
        // 简单上传
        'name/cos:PutObject',
        // 分片上传
        'name/cos:InitiateMultipartUpload',
        'name/cos:ListMultipartUploads',
        'name/cos:ListParts',
        'name/cos:UploadPart',
        'name/cos:CompleteMultipartUpload'
    )`);
        if (newContent !== content) {
            console.log('replace ' + filePath);
            fs.writeFileSync(filePath, newContent);
        }
    });
};
replaceVersion();

module.exports = {
    entry: path.resolve(__dirname, './index.js'),
    output: {
        path: path.resolve(__dirname, './dist'),
        publicPath: '/dist/',
        filename: 'cos-js-sdk-v5.js',
        libraryTarget: 'umd',
        library: 'COS',
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/
            }
        ]
    },
    devServer: {
        historyApiFallback: true,
        noInfo: true
    },
    performance: {
        hints: false
    },
};

if (process.env.NODE_ENV === 'production') {
    replaceDevCode([
        'demo/demo.js',
        'demo/queue/index.js',
        'test/test.js',
        'server/sts.js',
        'server/sts.php',
    ]);
    module.exports.output.filename = 'cos-js-sdk-v5.min.js';
    module.exports.plugins = (module.exports.plugins || []).concat([
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"production"'
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            sourceMap: false,
            output: {
                ascii_only: true,
            },
            compress: {
                warnings: false,
            },
        }),
        new webpack.LoaderOptionsPlugin({
            minimize: true
        }),
    ]);
}
