"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.command = void 0;
const clc = require("colorette");
const ora = require("ora");
const Table = require("cli-table");
const command_1 = require("../command");
const projects_1 = require("../management/projects");
const requireAuth_1 = require("../requireAuth");
const logger_1 = require("../logger");
const NOT_SPECIFIED = clc.yellow("[Not specified]");
function logProjectsList(projects, currentProjectId) {
    if (!projects.length) {
        return;
    }
    const tableHead = [
        "Project Display Name",
        "Project ID",
        "Project Number",
        "Resource Location ID",
    ];
    const table = new Table({ head: tableHead, style: { head: ["green"] } });
    projects.forEach(({ projectId, projectNumber, displayName, resources }) => {
        if (projectId === currentProjectId) {
            projectId = clc.cyan(clc.bold(`${projectId} (current)`));
        }
        table.push([
            displayName || NOT_SPECIFIED,
            projectId,
            projectNumber,
            (resources && resources.locationId) || NOT_SPECIFIED,
        ]);
    });
    logger_1.logger.info(table.toString());
}
function logProjectCount(arr = []) {
    if (!arr.length) {
        logger_1.logger.info(clc.bold("No projects found."));
        return;
    }
    logger_1.logger.info("");
    logger_1.logger.info(`${arr.length} project(s) total.`);
}
exports.command = new command_1.Command("projects:list")
    .description("list all Firebase projects you have access to")
    .before(requireAuth_1.requireAuth)
    .action(async (options) => {
    const spinner = ora("Preparing the list of your Firebase projects").start();
    let projects;
    try {
        projects = await (0, projects_1.listFirebaseProjects)();
    }
    catch (err) {
        spinner.fail();
        throw err;
    }
    spinner.succeed();
    logProjectsList(projects, options.project);
    logProjectCount(projects);
    return projects;
});