import * as Effect from 'effect/Effect';
import * as Layer from 'effect/Layer';
import * as Option from 'effect/Option';
import * as References from 'effect/References';
import * as NodeCrypto from '@effect/platform-node/NodeCrypto';
import * as NetService from '@t3tools/shared/Net';
import * as NodeServices from '@effect/platform-node/NodeServices';
import * as NodeRuntime from '@effect/platform-node/NodeRuntime';
import * as EnvironmentAuth from './src/auth/EnvironmentAuth.ts';
import * as ServerConfig from './src/config.ts';
import { resolveCliAuthConfig } from './src/cli/config.ts';
import { mcpToolSession } from './src/mcp/AcpMcpStdioBridge.ts';
import {readFileSync} from 'node:fs';
const [home, tool, input] = process.argv.slice(2);
const program = Effect.gen(function*(){
 const config = yield* resolveCliAuthConfig({baseDir:Option.some(home)},Option.none(),{quietLogs:true});
 yield* Effect.gen(function*(){
 const auth = yield* EnvironmentAuth.EnvironmentAuth;
 const issued = yield* Effect.acquireRelease(auth.issueMcpClientSession({label:'Schedule proof',access:'full-access',peerLink:false,client:{deviceType:'bot'}}), s=>auth.revokeSession(s.sessionId).pipe(Effect.ignore));
 const origin=JSON.parse(readFileSync(home+'/userdata/server-runtime.json','utf8')).origin;
 const session=yield* mcpToolSession({endpoint:new URL('/mcp',origin).href,authorization:`Bearer ${issued.token}`,clientName:'schedule-proof'});
 const result = yield* session.call(tool,JSON.parse(input));
 console.log(JSON.stringify(result));
 }).pipe(Effect.scoped,Effect.provide(EnvironmentAuth.layerRuntime.pipe(Layer.provide(ServerConfig.layer(config)),Layer.provide(Layer.succeed(References.MinimumLogLevel,'Error')))));
}).pipe(Effect.provide(Layer.mergeAll(NodeServices.layer,NetService.layer,NodeCrypto.layer)));
NodeRuntime.runMain(program);
