import * as dotenv from "dotenv";
dotenv.config();

import { scrapeShippingETA } from "../src/lib/shipping-scraper";
import { Pool } from "pg";

const pool = new Pool({
  host: "127.0.0.1",
  port: 5432,
  database: "carntrack",
  user: "postgres",
  password: "postgres",
});

async function testEvergreen() {
  console.log("🚀 Testing Evergreen Scraper\n");
  
  const containerNumber = "EMCU5515710";
  const orderNumber = "TEST-EVERGREEN-001";
  
  try {
    // Step 1: Check or create container
    console.log("📦 Step 1: Checking/Creating container...");
    let result = await pool.query(
      `SELECT id FROM container_shipment 
       WHERE container_number = $1 AND carrier = $2`,
      [containerNumber, "Evergreen"]
    );
    
    let containerId = result.rows[0]?.id;
    if (!containerId) {
      const insertResult = await pool.query(
        `INSERT INTO container_shipment 
         (order_number, container_number, carrier, vessel_tracking_url, created_at, updated_at) 
         VALUES ($1, $2, $3, $4, NOW(), NOW()) 
         RETURNING id`,
        [orderNumber, containerNumber, "Evergreen", "https://ct.shipmentlink.com/servlet/TDB1_CargoTracking.do"]
      );
      containerId = insertResult.rows[0].id;
      console.log(`✅ Container created: ${containerId}`);
    } else {
      console.log(`✅ Container found: ${containerId}`);
    }

    // Step 2: Scrape ETA
    console.log("\n🌐 Step 2: Scraping ETA...");
    const startTime = Date.now();
    const scraperResult = await scrapeShippingETA(containerNumber, "Evergreen");
    const duration = ((Date.now() - startTime) / 1000).toFixed(1);
    console.log(`✅ Scraping completed in ${duration}s`);
    console.log(`   Status: ${scraperResult.status}`);
    console.log(`   Raw ETA: ${scraperResult.etaRaw}`);
    console.log(`   Formatted ETA: ${scraperResult.etaFormatted}`);

    // Step 3: Update database
    if (scraperResult.status === "success" && scraperResult.etaRaw) {
      console.log("\n💾 Step 3: Updating database...");
      await pool.query(
        `UPDATE container_shipment 
         SET eta_raw = $1, eta = $2, last_eta_scrape_attempt = NOW(), status = 'success'
         WHERE id = $3`,
        [scraperResult.etaRaw, scraperResult.etaFormatted, containerId]
      );
      console.log("✅ Database updated!");
    } else {
      console.log("\n💾 Step 3: Updating database with error status...");
      await pool.query(
        `UPDATE container_shipment 
         SET last_eta_scrape_attempt = NOW(), status = 'not_found'
         WHERE id = $1`,
        [containerId]
      );
      console.log("⚠️ Database updated with not_found status");
    }

    // Step 4: Verify
    console.log("\n🔍 Step 4: Verifying update...");
    result = await pool.query(
      `SELECT container_number, eta, eta_raw FROM container_shipment WHERE id = $1`,
      [containerId]
    );
    console.log("✅ Container updated successfully!");
    console.log(`   Container: ${result.rows[0].container_number}`);
    console.log(`   New ETA: ${result.rows[0].eta}`);
    console.log(`   Raw: ${result.rows[0].eta_raw}`);

  } catch (error) {
    console.error("❌ Error:", error);
  } finally {
    await pool.end();
    console.log("\n✅ ALL DONE!");
  }
}

testEvergreen();
