"use strict";
/*
 * Tencent is pleased to support the open source community by making
 * Hippy available.
 *
 * Copyright (C) 2017-2019 THL A29 Limited, a Tencent company.
 * All rights reserved.
 *
 * 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
 *
 *   http://www.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.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCDPPerformance = exports.report = void 0;
const tslib_1 = require("tslib");
const os_1 = tslib_1.__importDefault(require("os"));
const aegis_1 = tslib_1.__importDefault(require("@debug-server-next/patch/aegis"));
const beacon_1 = tslib_1.__importDefault(require("@debug-server-next/patch/beacon"));
const config_1 = require("@debug-server-next/config");
const bundle_version_1 = require("@debug-server-next/utils/bundle-version");
const enum_1 = require("@debug-server-next/@types/enum");
const package_json_1 = require("../../package.json");
class Report {
    constructor() {
        this.event = (event) => {
            aegis.reportEvent(event);
            getBeacon().onDirectUserAction(event.name, event);
        };
        this.error = (e) => {
            aegis.report(e);
        };
        this.log = (msg) => {
            aegis.infoAll(msg);
        };
        this.time = (duration, event) => {
            aegis.reportTime({
                duration,
                ...event,
            });
        };
        this.timeStart = (name) => {
            const start = Date.now();
            return (event = {}) => {
                const end = Date.now();
                const duration = end - start;
                aegis.reportTime({
                    duration,
                    ...event,
                    name,
                });
            };
        };
        this.addCommonParams = (params) => {
            getBeacon().addAdditionalParams({
                ...params,
                userApp: global.debugAppArgv.env,
                devtoolsPlatform: devtoolsPlatform(),
                devtoolsEnv: config_1.config.isCluster ? 'remote' : 'local',
                hostname: os_1.default.hostname(),
            });
        };
    }
}
exports.report = new Report();
const aegis = new aegis_1.default({
    id: config_1.config.aegisId,
    selector: {
        type: 'host',
    },
    uin: (0, bundle_version_1.getBundleVersionId)(),
    version: package_json_1.version,
    ext3: config_1.config.isCluster ? 'remote' : 'local',
    // protocol: 'http',
});
let beacon;
const getBeacon = () => {
    if (!beacon) {
        beacon = new beacon_1.default({
            appkey: '0WEB0A25405J1LFO',
            versionCode: package_json_1.version,
            openid: (0, bundle_version_1.getBundleVersionId)(),
            unionid: (0, bundle_version_1.getBundleVersionId)(),
        });
    }
    return beacon;
};
const devtoolsPlatform = () => {
    const osType = os_1.default.type();
    if (osType === enum_1.OSType.Darwin) {
        if (process.arch === 'arm64') {
            return `${osType}_arm64`;
        }
        return `${osType}_x86`;
    }
    return osType;
};
const createCDPPerformance = (perf) => ({
    devtoolsToDebugServer: 0,
    debugServerReceiveFromDevtools: 0,
    debugServerToDevtools: 0,
    devtoolsReceive: 0,
    ...(perf || {}),
});
exports.createCDPPerformance = createCDPPerformance;
