import type { ExtensionAPI, ExtensionContext } from 'shortcutxl/app';

const COMPACT_THRESHOLD_TOKENS = 100_000;

export default function (shortcut: ExtensionAPI) {
  const triggerCompaction = (ctx: ExtensionContext, customInstructions?: string) => {
    if (ctx.hasUI) {
      ctx.ui.notify('Compaction started', 'info');
    }
    ctx.compact({
      customInstructions,
      onComplete: () => {
        if (ctx.hasUI) {
          ctx.ui.notify('Compaction completed', 'info');
        }
      },
      onError: (error) => {
        if (ctx.hasUI) {
          ctx.ui.notify(`Compaction failed: ${error.message}`, 'error');
        }
      }
    });
  };

  shortcut.on('turn_end', (_event, ctx) => {
    const usage = ctx.getContextUsage();
    if (!usage || usage.tokens === null || usage.tokens <= COMPACT_THRESHOLD_TOKENS) {
      return;
    }
    triggerCompaction(ctx);
  });

  shortcut.registerCommand('trigger-compact', {
    description: 'Trigger compaction immediately',
    handler: async (args, ctx) => {
      const instructions = args.trim() || undefined;
      triggerCompaction(ctx, instructions);
    }
  });
}
