import c from 'chalk';
import fs from 'fs-extra';
import * as path from 'path';
import * as os from 'os';
import { getConfig } from '../../config/index.js';
import { uxLog } from '../utils/index.js';
export class LocalTestProvider {
    name = 'localtest';
    description = 'Writes in a local file (just for tests, can not work in CI)';
    poolStorageLocalFileName = null;
    async initialize() {
        await this.managePoolStorageLocalFileName();
        return this.poolStorageLocalFileName !== null;
    }
    async getValue(key = null) {
        await this.managePoolStorageLocalFileName(key);
        if (fs.existsSync(this.poolStorageLocalFileName || '')) {
            return fs.readJsonSync(this.poolStorageLocalFileName || '');
        }
        return {};
    }
    async setValue(key = null, value) {
        await this.managePoolStorageLocalFileName(key);
        await fs.writeFile(this.poolStorageLocalFileName || '', JSON.stringify(value, null, 2), 'utf8');
        return true;
    }
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    async updateActiveScratchOrg(_scratchOrg, _keyValues) {
        return null;
    }
    async managePoolStorageLocalFileName(key = null) {
        if (this.poolStorageLocalFileName == null) {
            if (key === null) {
                const config = await getConfig('user');
                const projectName = config.projectName || 'default';
                key = `pool_${projectName}`;
            }
            this.poolStorageLocalFileName = path.join(os.homedir(), `poolStorage_${key}.json`);
            uxLog("log", this, c.grey('Local test storage file: ' + this.poolStorageLocalFileName));
        }
    }
    async userSetup() {
        return true;
    }
    async userAuthenticate() {
        // No authentication for testing local files
        return true;
    }
}
//# sourceMappingURL=localtest.js.map