import * as NetService from '@t3tools/shared/Net';
import * as NodeCrypto from '@effect/platform-node/NodeCrypto';
import * as NodeRuntime from '@effect/platform-node/NodeRuntime';
import * as NodeServices from '@effect/platform-node/NodeServices';
import * as Effect from 'effect/Effect';
import * as Layer from 'effect/Layer';
import * as References from 'effect/References';
import * as Console from 'effect/Console';
import { Command,Flag,GlobalFlag } from 'effect/cli';
import * as Auth from '../src/auth/EnvironmentAuth.ts';
import * as ServerConfig from '../src/config.ts';
import {authLocationFlags,resolveCliAuthConfig} from '../src/cli/config.ts';
const command=Command.make('issue-proof-client',{...authLocationFlags,peer:Flag.Boolean('peer').pipe(Flag.withDefault(false))}).pipe(Command.withHandler(flags=>Effect.gen(function*(){
 const config=yield* resolveCliAuthConfig(flags,yield* GlobalFlag.LogLevel,{quietLogs:true});
 yield* Effect.gen(function*(){const auth=yield* Auth.EnvironmentAuth;const issued=yield* auth.issueMcpClientSession({label:flags.peer?'Proof linked peer':'Proof outside MCP client',access:'full-access',peerLink:flags.peer,client:{deviceType:'bot'}});yield* Console.log(issued.token);}).pipe(Effect.provide(Auth.layerRuntime.pipe(Layer.provide(ServerConfig.layer(config)),Layer.provide(Layer.succeed(References.MinimumLogLevel,'Error')))));
})));
Command.run(command,{version:'1'}).pipe(Effect.scoped,Effect.provide([NodeServices.layer,NetService.layer,NodeCrypto.layer]),NodeRuntime.runMain);
