#!/usr/bin/env node
// Quick-import helper for linkedin-thought-leadership plugin
// Opens LinkedIn analytics in browser, watches ~/Downloads for new CSV files

import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { exec } from 'node:child_process';

const __dirname = dirname(fileURLToPath(import.meta.url));
const PLUGIN_ROOT = join(__dirname, '..', '..');
const HOME = process.env.HOME || process.env.USERPROFILE || '';
const EXPORTS_DIR = join(PLUGIN_ROOT, 'assets', 'analytics', 'exports');
const DOWNLOADS_DIR = join(HOME, 'Downloads');
const POLL_INTERVAL = 3000;
const MAX_WAIT = 300000; // 5 minutes

mkdirSync(EXPORTS_DIR, { recursive: true });

// Snapshot existing CSV files
function getCsvFiles() {
  try {
    return readdirSync(DOWNLOADS_DIR)
      .filter(f => f.endsWith('.csv'))
      .sort();
  } catch { return []; }
}

// Cross-platform browser open
function openUrl(url) {
  const cmd = process.platform === 'darwin' ? 'open'
    : process.platform === 'win32' ? 'start ""'
    : 'xdg-open';
  exec(`${cmd} "${url}"`, () => {});
}

const beforeFiles = new Set(getCsvFiles());

console.log('Opening LinkedIn Analytics in your browser...');
openUrl('https://www.linkedin.com/analytics/creator/content/');

console.log('\nInstructions:');
console.log('  1. Click \'Export\' (top right) in LinkedIn Analytics');
console.log('  2. LinkedIn will download a CSV to ~/Downloads');
console.log('  3. This script will detect it automatically\n');
console.log('Watching ~/Downloads for new CSV files (max 5 minutes)...\n');

let elapsed = 0;
const timer = setInterval(() => {
  elapsed += POLL_INTERVAL;

  const currentFiles = getCsvFiles();
  const newFiles = currentFiles.filter(f => !beforeFiles.has(f));

  for (const filename of newFiles) {
    const filePath = join(DOWNLOADS_DIR, filename);
    try {
      const age = (Date.now() - statSync(filePath).mtime.getTime()) / 1000;
      if (/linkedin|analytics|content|export/i.test(filename) || age < 60) {
        console.log(`Detected: ${filename}`);
        copyFileSync(filePath, join(EXPORTS_DIR, filename));
        console.log(`Copied to: ${EXPORTS_DIR}/${filename}\n`);
        console.log('File is ready for import. Run:');
        console.log('  /linkedin:import\n');
        console.log('Or import directly with:');
        console.log(`  ANALYTICS_ROOT="${PLUGIN_ROOT}/assets/analytics" node --import tsx "${PLUGIN_ROOT}/scripts/analytics/src/cli.ts" import "${filename}"`);
        clearInterval(timer);
        process.exit(0);
      }
    } catch { /* ignore */ }
  }

  if (elapsed % 15000 === 0) {
    const remaining = Math.floor((MAX_WAIT - elapsed) / 60000);
    console.log(`  Still waiting... (${remaining}m remaining)`);
  }

  if (elapsed >= MAX_WAIT) {
    console.log('\nTimed out after 5 minutes. No new CSV detected.\n');
    console.log('You can manually copy the file:');
    console.log(`  mv ~/Downloads/<linkedin-csv-file>.csv ${EXPORTS_DIR}/`);
    console.log('  /linkedin:import');
    clearInterval(timer);
    process.exit(1);
  }
}, POLL_INTERVAL);
