import { loadFundamentals, getFundamentalsAsOf } from '../fundamentals.js';

function runTest() {
  console.log("Running fundamentals lookahead test...");

  const testData = [
    { 
      symbol: 'AAPL', 
      datekey: '2020-02-15', // Actually filed on Feb 15
      fiscalEnd: '2019-12-31', 
      metrics: { roe: 0.10 } 
    },
    { 
      symbol: 'AAPL', 
      datekey: '2020-05-15', // Q1 filed on May 15
      fiscalEnd: '2020-03-31', 
      metrics: { roe: 0.12 } 
    },
    {
      symbol: 'MSFT',
      datekey: null,         // Missing datekey, should fallback to fiscalEnd + 120 days
      fiscalEnd: '2019-12-31', // + 120 days = 2020-04-29
      metrics: { roe: 0.15 }
    }
  ];

  loadFundamentals(testData);

  // Test 1: Jan 31, 2020. 
  // The Dec 31 fiscal data isn't filed until Feb 15. We MUST return null.
  const a1 = getFundamentalsAsOf('AAPL', '2020-01-31');
  if (a1 !== null) throw new Error("Lookahead leak! Returned Q4 data before filing date.");

  // Test 2: Feb 16, 2020.
  // The Dec 31 fiscal data was filed Feb 15. We should get it.
  const a2 = getFundamentalsAsOf('AAPL', '2020-02-16');
  if (!a2 || a2.roe !== 0.10) throw new Error("Failed to return available data.");

  // Test 3: May 14, 2020.
  // Q1 isn't filed until May 15. We should still get Q4 (roe: 0.10).
  const a3 = getFundamentalsAsOf('AAPL', '2020-05-14');
  if (!a3 || a3.roe !== 0.10) throw new Error("Lookahead leak! Returned Q1 data early.");

  // Test 4: May 16, 2020.
  // Now we should get Q1 (roe: 0.12).
  const a4 = getFundamentalsAsOf('AAPL', '2020-05-16');
  if (!a4 || a4.roe !== 0.12) throw new Error("Failed to roll forward to new data.");

  // Test 5: MSFT fallback logic. Target = April 28 (119 days after fiscalEnd). Should be null.
  const m1 = getFundamentalsAsOf('MSFT', '2020-04-28');
  if (m1 !== null) throw new Error("Lookahead leak! MSFT fallback data returned early.");

  // Test 6: MSFT fallback logic. Target = April 30 (121 days after fiscalEnd). Should be available.
  const m2 = getFundamentalsAsOf('MSFT', '2020-04-30');
  if (!m2 || m2.roe !== 0.15) throw new Error("Failed to return fallback data after 120 days.");

  console.log("PASS: Fundamentals guardrail strictly prevents lookahead bias.");
}

runTest();
