/* global window */
/* ============================================================
   地产数据中台 — Mock GTA market data + chart palette
   ============================================================ */

// ---- Chart / data-viz palette (harmonized with AZ green) ----
const CHART = {
  green:     '#64BC64',  // AZ green — primary series
  greenDeep: '#2F6E4E',  // deeper green
  ink:       '#1F281F',  // dark green
  gold:      '#C0922E',  // warm gold (Pantone 871 spirit), reserved accent
  steel:     '#6E8CA8',  // muted blue-steel
  clay:      '#C2553F',  // risk / decline
  amber:     '#D69E2E',  // alert / neutral pressure
  up:        '#2E8B57',  // positive
  down:      '#C2553F',  // negative
  grid:      '#E6E6E6',
};

// Property-type series colors — consistent platform-wide
const PROP_COLORS = {
  'Detached':   CHART.green,
  'Semi':       CHART.steel,
  'Townhouse':  CHART.greenDeep,
  'Condo':      CHART.gold,
};

// ---- Monthly time series: May 2024 → Apr 2026 (24 mo) ----
const MONTHS = (() => {
  const out = [];
  const names = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  let y = 2024, m = 4; // May 2024 (0-indexed month 4)
  for (let i = 0; i < 24; i++) {
    out.push({ label: names[m] + " '" + String(y).slice(2), name: names[m], year: y, mi: m });
    m++; if (m > 11) { m = 0; y++; }
  }
  return out;
})();

// Seeded-ish believable series. Avg price (Detached, York Region) recovering.
const SERIES = {
  // Average sale price ($K) — York Region Detached
  avgPrice: [1542,1528,1505,1471,1455,1448,1462,1479,1468,1452,1438,1455,1472,1496,1531,1558,1542,1525,1538,1554,1571,1589,1605,1622],
  // Transaction volume (# sales)
  sales:    [612,588,541,498,452,467,503,548,521,486,455,503,548,612,701,742,688,641,672,718,759,803,841,872],
  // New listings
  newList:  [1340,1288,1190,1402,1521,1488,1402,1338,1455,1602,1521,1188,1042,1190,1455,1688,1742,1602,1538,1471,1402,1455,1488,1402],
  // Active listings (inventory)
  active:   [4820,5010,5240,5530,5910,6280,6510,6720,6880,7020,6980,6510,5820,5510,5680,6020,6480,6810,6920,6810,6620,6410,6240,6080],
  // SNLR (sales-to-new-listings ratio, %)
  snlr:     [46,46,45,36,30,31,36,41,36,30,30,42,53,51,48,44,40,40,44,49,54,55,57,62],
  // Months of inventory
  moi:      [7.9,8.5,9.7,11.1,13.1,13.4,12.9,12.3,13.2,14.4,15.3,12.9,10.6,9.0,8.1,8.1,9.4,10.6,10.3,9.5,8.7,8.0,7.4,7.0],
  // Days on market (avg)
  dom:      [21,24,28,33,38,41,39,36,38,42,45,38,32,27,23,22,26,30,29,27,24,22,20,19],
  // Sold price / List price (%)
  splp:     [101,100,99,98,97,96,97,98,97,96,95,97,99,101,103,103,101,100,100,101,102,103,104,105],
};

// ---- Headline KPIs (latest = Apr 2026) ----
const KPIS = [
  { key: 'avgPrice', label: 'Average price',   value: '$1.62M', delta: '+1.1%', dir: 'up',   sub: 'MoM',  yoy: '+11.5% YoY' },
  { key: 'sales',    label: 'Sales volume',    value: '872',    delta: '+3.7%', dir: 'up',   sub: 'MoM',  yoy: '+92 YoY' },
  { key: 'active',   label: 'Active listings', value: '6,080',  delta: '−2.6%', dir: 'down',  sub: 'MoM',  yoy: '−14% YoY' },
  { key: 'moi',      label: 'Months of inv.',  value: '7.0',    delta: '−0.4',  dir: 'down',  sub: 'MoM',  yoy: 'Balanced' },
  { key: 'snlr',     label: 'SNLR',            value: '62%',    delta: '+5 pts', dir: 'up',   sub: 'MoM',  yoy: "Seller's" },
];

// ---- Regions for quick-switch + heatmap-ish data ----
const REGIONS = [
  { id: 'gta',     name: 'GTA',            price: '$1.18M', yoy: '+8.4%',  moi: 3.2, snlr: 58, status: 'Balanced+' },
  { id: 'york',    name: 'York Region',    price: '$1.62M', yoy: '+11.5%', moi: 7.0, snlr: 62, status: "Seller's" },
  { id: 'toronto', name: 'Toronto',        price: '$1.09M', yoy: '+6.1%',  moi: 2.8, snlr: 55, status: 'Balanced' },
  { id: 'peel',    name: 'Peel',           price: '$1.04M', yoy: '+7.2%',  moi: 3.6, snlr: 52, status: 'Balanced' },
  { id: 'durham',  name: 'Durham',         price: '$0.94M', yoy: '+9.0%',  moi: 3.1, snlr: 60, status: "Seller's" },
  { id: 'halton',  name: 'Halton',         price: '$1.33M', yoy: '+7.8%',  moi: 4.0, snlr: 54, status: 'Balanced' },
];

// ---- Market heat cards ----
const HEAT_CARDS = [
  { key: 'buyer',  title: 'Buyer Opportunity', score: 'Medium', tone: 'amber', metric: 'MOI 7.0 · DOM 19d',  note: '库存仍偏高，买家有议价空间，但优质独立屋竞争回升。' },
  { key: 'seller', title: 'Seller Timing',     score: 'High',   tone: 'green', metric: 'SNLR 62% · SP/LP 105%', note: '需求回暖，定价合理的房源成交加快，是上市的好窗口。' },
  { key: 'inv',    title: 'Inventory Pressure', score: 'Easing', tone: 'green', metric: 'Active −2.6% MoM',  note: '新增挂牌放缓，库存连续两月回落，压力正在缓解。' },
  { key: 'mom',    title: 'Price Momentum',    score: 'Positive', tone: 'green', metric: '+1.1% MoM · 4 mo ↑', note: '均价连续四个月上行，动能温和但方向明确。' },
];

// ---- Watchlist ----
const WATCHLIST = [
  { id: 'w1', area: 'Aurora', type: 'Detached',  price: '$1.74M', delta: '+1.8%', dir: 'up',   spark: [1.66,1.64,1.62,1.65,1.68,1.70,1.71,1.74] },
  { id: 'w2', area: 'Richmond Hill', type: 'Townhouse', price: '$1.18M', delta: '+0.9%', dir: 'up', spark: [1.12,1.11,1.10,1.12,1.14,1.15,1.17,1.18] },
  { id: 'w3', area: 'Markham', type: 'Condo Apt', price: '$648K', delta: '−0.4%', dir: 'down', spark: [0.66,0.658,0.655,0.652,0.650,0.651,0.650,0.648] },
];

// ---- Property-type breakdown (latest month) ----
const BREAKDOWN = [
  { type: 'Detached',  price: 1622, sales: 412, share: 47 },
  { type: 'Townhouse', price: 1042, sales: 198, share: 23 },
  { type: 'Semi',      price: 1188, sales: 121, share: 14 },
  { type: 'Condo',     price: 648,  sales: 141, share: 16 },
];

// ---- Historical table rows (last 12 months, derived) ----
const TABLE_ROWS = MONTHS.slice(-12).map((mo, i) => {
  const idx = MONTHS.length - 12 + i;
  return {
    period: mo.label,
    sales: SERIES.sales[idx],
    newList: SERIES.newList[idx],
    active: SERIES.active[idx],
    avg: SERIES.avgPrice[idx],
    snlr: SERIES.snlr[idx],
    moi: SERIES.moi[idx],
    dom: SERIES.dom[idx],
    splp: SERIES.splp[idx],
  };
}).reverse();

// ---- AI Market Highlights (3 audience modes) ----
const AI_INSIGHTS = {
  context: 'York Region · Detached · May 2024 – Apr 2026',
  sample: '样本 18,472 listings',
  client: {
    bigPicture: '市场正在回暖。买家在慢慢回来，但可选房源还比较多，所以价格涨得不快、也比较稳。',
    latestReading: '4月独立屋均价 $1.62M，比上个月涨了 1.1%，比去年同期高约 11.5%。',
    streaks: '价格已经连续 4 个月上涨，成交量也比年初明显增加。',
    highLow: '目前价格距离 2024 年中的低点已经回升约 12%，但仍低于历史高点。',
    seasonal: '春季（3–5月）通常是 GTA 最活跃的季节，现在的回暖部分是季节性的。',
    advice: '如果你在看房，现在选择多、还能谈价；但好房子开始变快，别拖太久。',
  },
  agent: {
    bigPicture: 'York Detached 进入温和复苏：SNLR 升至 62%，MOI 回落至 7.0，需求端领先于价格端修复。',
    latestReading: 'Apr-26 均价 $1,622K（+1.1% MoM / +11.5% YoY），成交 872（+3.7% MoM），SP/LP 105%。',
    streaks: '均价 4 连涨（累计 +5.2%）；成交量自 1 月低点反弹 +73%；新增挂牌连续 3 月走低。',
    highLow: 'From bottom +12.0%（2024-08 低点 $1,448K）；From peak −7.4%。极值集中在春季窗口。',
    seasonal: '季节性：3–5 月与 9–10 月为高活跃区；当前回暖含约 40% 季节性成分，需做去季节化校验。',
    advice: '卖方：定价贴近市场可获 105% SP/LP 与 19 天 DOM；买方：议价空间收窄，优质房源建议加快决策。',
  },
  live: {
    bigPicture: '成交量回来了，但价格还没完全涨上去 —— 这就是现在 York 独立屋的状态。',
    latestReading: '一句话记住：均价 162 万，环比涨 1%，同比涨 11.5%。',
    streaks: '关键信号：价格 4 个月连涨，但库存还在 7 个月，所以不是疯抢。',
    highLow: '从去年低点到现在，已经回来了 12%。',
    seasonal: '注意：现在是春季旺季，别把季节性当成趋势反转。',
    advice: '买家：还有机会，但别犹豫太久；卖家：定价合理才卖得快，别高开。',
  },
};

// ---- Live Studio: topics, outline, playlist, Q&A ----
const LIVE_TOPICS = [
  { id: 't1', text: '成交量回升，价格为什么还没涨？', tag: 'Market', hot: true },
  { id: 't2', text: '卖家现在还能不能高开 5%？', tag: 'Seller', hot: false },
  { id: 't3', text: 'Condo 是机会还是陷阱？', tag: 'Condo', hot: true },
  { id: 't4', text: 'York vs Toronto，今年买哪边？', tag: 'Region', hot: false },
];

const LIVE_OUTLINE = [
  { id: 'o1', t: 'Opening', d: '今天讲什么 + 一个互动问题', dur: '2 min' },
  { id: 'o2', t: 'GTA Big Picture', d: '大盘均价 / 成交 / 库存', dur: '4 min' },
  { id: 'o3', t: 'York Region', d: '独立屋价格趋势 + SNLR', dur: '5 min' },
  { id: 'o4', t: 'Buyer Advice', d: '现在怎么出价、看什么房', dur: '4 min' },
  { id: 'o5', t: 'Seller Advice', d: '定价策略与上市窗口', dur: '4 min' },
  { id: 'o6', t: 'Q&A', d: '现场问题 + AI 分类', dur: '6 min' },
  { id: 'o7', t: 'CTA', d: '扫码领报告 / 估值 / 预约', dur: '2 min' },
];

const PLAYLIST = [
  { id: 'p1', kind: 'Opening', title: '成交量回升，价格为什么还没涨？', takeaway: '今天讲 3 件事：大盘、York、买卖建议', chart: 'opening' },
  { id: 'p2', kind: 'Market KPI', title: 'GTA 大盘速览', takeaway: '需求回暖，库存仍偏高', chart: 'kpi' },
  { id: 'p3', kind: 'Trend', title: 'York 独立屋均价趋势', takeaway: '4 个月连涨，但仍低于高点', chart: 'avgPrice' },
  { id: 'p4', kind: 'Trend', title: 'SNLR：需求强度', takeaway: 'SNLR 升到 62%，进入卖方区间', chart: 'snlr' },
  { id: 'p5', kind: 'Comparison', title: '区域对比：York vs Toronto', takeaway: 'York 涨幅领先，但单价更高', chart: 'compare' },
  { id: 'p6', kind: 'Advice', title: '买家 & 卖家建议', takeaway: '卖家别高开，买家别犹豫', chart: 'advice' },
  { id: 'p7', kind: 'CTA', title: '扫码领取本场市场报告', takeaway: '报告 / 估值 / 预约', chart: 'cta' },
];

const QA_ITEMS = [
  { id: 'q1', q: 'Aurora 的独立屋现在适合入手吗？', cat: 'Buyer', region: 'Aurora', lead: true },
  { id: 'q2', q: '我家 2022 买的，现在卖会亏吗？', cat: 'Seller', region: 'Markham', lead: true },
  { id: 'q3', q: 'Condo 出租回报率大概多少？', cat: 'Investor', region: 'Toronto', lead: false },
  { id: 'q4', q: '利率下半年会降吗？', cat: 'Rate', region: '—', lead: false },
  { id: 'q5', q: '首付不够能先看哪些区？', cat: 'First-Time', region: 'Durham', lead: true },
];

const QA_CATS = {
  Buyer: CHART.green, Seller: CHART.gold, Investor: CHART.steel,
  Region: CHART.greenDeep, Rate: CHART.amber, 'First-Time': CHART.clay, Condo: '#9A6FB0',
};

// ---- Leads ----
const LEADS = [
  { id: 'l1', name: 'Jennifer Liu', src: 'Live · Report', intent: ['Buyer','Aurora','Detached'], time: '2 min ago', score: 'Hot', lang: '中文' },
  { id: 'l2', name: 'David Chen', src: 'Home Valuation', intent: ['Seller','Markham','Condo'], time: '18 min ago', score: 'Hot', lang: '中文' },
  { id: 'l3', name: 'Sarah Thompson', src: 'Region Report', intent: ['Buyer','Richmond Hill'], time: '1 hr ago', score: 'Warm', lang: 'EN' },
  { id: 'l4', name: 'Wei Zhang', src: 'Book Consult', intent: ['Investor','Toronto','Condo'], time: '3 hr ago', score: 'Hot', lang: '中文' },
  { id: 'l5', name: 'Michael Park', src: 'Live · Q&A', intent: ['First-Time','Durham'], time: '5 hr ago', score: 'Warm', lang: 'EN' },
  { id: 'l6', name: 'Amy Wong', src: 'Region Report', intent: ['Seller','Vaughan'], time: 'Yesterday', score: 'Cold', lang: '中文' },
];

Object.assign(window, {
  CHART, PROP_COLORS, MONTHS, SERIES, KPIS, REGIONS, HEAT_CARDS, WATCHLIST,
  BREAKDOWN, TABLE_ROWS, AI_INSIGHTS, LIVE_TOPICS, LIVE_OUTLINE, PLAYLIST,
  QA_ITEMS, QA_CATS, LEADS,
});
