import { Innertube } from 'youtubei.js';
import { Red } from '../modules/sub/consoleText.js'

const bail = (...msg) => {
    console.error(...msg);
    throw new Error(msg);
};

const tube = await Innertube.create();

tube.session.once(
    'auth-pending',
    ({ verification_url, user_code }) => {
        console.log(`${Red('[!]')} The token generated by this script is sensitive and you should not share it with anyone!`);
        console.log(`    By using this token, you are risking your Google account getting terminated.`);
        console.log(`    You should ${Red('NOT')} use your personal account!`);
        console.log();
        console.log(`Open ${verification_url} in a browser and enter ${user_code} when asked for the code.`);
    }
);

tube.session.once('auth-error', (err) => bail('An error occurred:', err));
tube.session.once('auth', ({ credentials }) => {
    if (!credentials.access_token) {
        bail('something went wrong');
    }

    console.log(
        'add this cookie to the youtube_oauth array in your cookies file:',
        JSON.stringify(
            Object.entries(credentials)
                .map(([k, v]) => `${k}=${v instanceof Date ? v.toISOString() : v}`)
                .join('; ')
        )
    );
});

await tube.session.signIn();