/* release-platforms.jsx ──────────────────────────────────────────────────
   Companion data for release-level DSP popularity scores. Drawn from
   astro.releases columns: spotify_popularity, tidal_popularity,
   qobuz_popularity, spotify_album_type, tidal_audio_quality, qobuz_hires,
   tidal_num_volumes, qobuz_maximum_bit_depth/sampling_rate, etc.

   Surfaces the "PLATFORM POPULARITY" tile strip in the release drawer,
   the popularity column in ReleasesView, and the analytics chart.
*/

try {
const RELEASE_PLATFORM_DETAILS = {
  // ── A Seat at the Table · Solange (2016) ──────────────────────
  rl_01: {
    spotifyPopularity: 78,    spotifyAlbumType: 'album',  spotifyTotalTracks: 21,
    tidalPopularity: 74,      tidalQuality: 'HI-RES LOSSLESS', tidalNumVolumes: 1,
    qobuzPopularity: 71,      qobuzHires: true,           qobuzMaximumBitDepth: 24, qobuzMaximumSamplingRate: 96,
    appleMusicScore: 84,      appleHasAtmos: true,
    lastUpdated: '2 hours ago',
  },
  // ── Crush · Floating Points (2019) ────────────────────────────
  rl_02: {
    spotifyPopularity: 61,    spotifyAlbumType: 'album',  spotifyTotalTracks: 9,
    tidalPopularity: 58,      tidalQuality: 'HI-RES LOSSLESS', tidalNumVolumes: 1,
    qobuzPopularity: 64,      qobuzHires: true,           qobuzMaximumBitDepth: 24, qobuzMaximumSamplingRate: 96,
    appleMusicScore: 56,      appleHasAtmos: false,
    lastUpdated: '4 hours ago',
  },
  // ── Desire, I Want To Turn Into You · Caroline Polachek (2023) ─
  rl_03: {
    spotifyPopularity: 82,    spotifyAlbumType: 'album',  spotifyTotalTracks: 12,
    tidalPopularity: 79,      tidalQuality: 'HI-RES LOSSLESS', tidalNumVolumes: 1,
    qobuzPopularity: 76,      qobuzHires: true,           qobuzMaximumBitDepth: 24, qobuzMaximumSamplingRate: 96,
    appleMusicScore: 88,      appleHasAtmos: true,
    lastUpdated: '1 hour ago',
  },
  // ── Devotion · Tirzah (2018) ───────────────────────────────────
  rl_04: {
    spotifyPopularity: 54,    spotifyAlbumType: 'album',  spotifyTotalTracks: 11,
    tidalPopularity: 51,      tidalQuality: 'LOSSLESS',   tidalNumVolumes: 1,
    qobuzPopularity: 48,      qobuzHires: false,          qobuzMaximumBitDepth: 16, qobuzMaximumSamplingRate: 44.1,
    appleMusicScore: 53,      appleHasAtmos: false,
    lastUpdated: '6 hours ago',
  },
  // ── Far In · Helado Negro (2021) ───────────────────────────────
  rl_05: {
    spotifyPopularity: 49,    spotifyAlbumType: 'album',  spotifyTotalTracks: 14,
    tidalPopularity: 46,      tidalQuality: 'HI-RES LOSSLESS', tidalNumVolumes: 1,
    qobuzPopularity: 51,      qobuzHires: true,           qobuzMaximumBitDepth: 24, qobuzMaximumSamplingRate: 48,
    appleMusicScore: 47,      appleHasAtmos: false,
    lastUpdated: '8 hours ago',
  },
  // ── BUBBA · KAYTRANADA (2019) ──────────────────────────────────
  rl_06: {
    spotifyPopularity: 81,    spotifyAlbumType: 'album',  spotifyTotalTracks: 17,
    tidalPopularity: 78,      tidalQuality: 'HI-RES LOSSLESS', tidalNumVolumes: 1,
    qobuzPopularity: 70,      qobuzHires: true,           qobuzMaximumBitDepth: 24, qobuzMaximumSamplingRate: 96,
    appleMusicScore: 87,      appleHasAtmos: true,
    lastUpdated: '1 hour ago',
  },
  // ── EP2 · Yaeji (2017) ─────────────────────────────────────────
  rl_07: {
    spotifyPopularity: 67,    spotifyAlbumType: 'ep',     spotifyTotalTracks: 7,
    tidalPopularity: 62,      tidalQuality: 'LOSSLESS',   tidalNumVolumes: 1,
    qobuzPopularity: 58,      qobuzHires: false,          qobuzMaximumBitDepth: 16, qobuzMaximumSamplingRate: 44.1,
    appleMusicScore: 64,      appleHasAtmos: false,
    lastUpdated: '3 hours ago',
  },
  // ── I AM · Sault (2024) ────────────────────────────────────────
  rl_08: {
    spotifyPopularity: 72,    spotifyAlbumType: 'album',  spotifyTotalTracks: 18,
    tidalPopularity: 69,      tidalQuality: 'HI-RES LOSSLESS', tidalNumVolumes: 2,
    qobuzPopularity: 66,      qobuzHires: true,           qobuzMaximumBitDepth: 24, qobuzMaximumSamplingRate: 48,
    appleMusicScore: 74,      appleHasAtmos: true,
    lastUpdated: '5 hours ago',
  },
};

// Composite "popularity" score (avg across DSPs) used in lists & analytics
function compositePopularity(p) {
  if (!p) return null;
  const vals = ['spotifyPopularity','tidalPopularity','qobuzPopularity','appleMusicScore']
    .map(k => p[k]).filter(v => typeof v === 'number');
  if (vals.length === 0) return null;
  return Math.round(vals.reduce((a,b)=>a+b,0) / vals.length);
}

// ── 90-day trend series for analytics (4 platforms × 13 weekly points) ─
// Synthesized: gentle wave around each release's current popularity.
function buildTrendSeries() {
  const series = {};
  Object.entries(RELEASE_PLATFORM_DETAILS).forEach(([id,p]) => {
    const seed = id.charCodeAt(id.length-1);
    const wk = (cur, amp, phase) => Array.from({length:13},(_,i)=>{
      const base = cur ?? 50;
      const wave = Math.sin((i+phase)*0.8 + seed*0.3) * amp;
      const drift = (i - 6) * 0.4;          // slight upward trend toward "now"
      return Math.max(5, Math.min(100, Math.round(base - 3 + wave + drift)));
    });
    series[id] = {
      spotify: wk(p.spotifyPopularity, 4, 0),
      tidal:   wk(p.tidalPopularity,   3, 1),
      qobuz:   wk(p.qobuzPopularity,   3, 2),
      apple:   wk(p.appleMusicScore,   4, 3),
    };
  });
  return series;
}

window.RELEASE_PLATFORM_DETAILS = RELEASE_PLATFORM_DETAILS;
window.releasePopularityScore   = (id) => compositePopularity(RELEASE_PLATFORM_DETAILS[id]);
window.RELEASE_POPULARITY_TREND = buildTrendSeries();

// ── Per-territory popularity (mirrors astro.releases.spotify_markets jsonb) ──
// Top markets per release with composite popularity scores.
window.RELEASE_TERRITORY_POPULARITY = {
  rl_01: [ // A Seat at the Table · Solange — global, US-heavy
    {iso:'US',name:'United States', pop:88,share:38},
    {iso:'GB',name:'United Kingdom', pop:74,share:11},
    {iso:'CA',name:'Canada',         pop:72,share: 7},
    {iso:'AU',name:'Australia',      pop:68,share: 5},
    {iso:'DE',name:'Germany',        pop:62,share: 4},
    {iso:'FR',name:'France',         pop:60,share: 4},
    {iso:'NL',name:'Netherlands',    pop:58,share: 3},
    {iso:'JP',name:'Japan',          pop:54,share: 3},
  ],
  rl_02: [ // Crush · Floating Points — UK / EU electronic
    {iso:'GB',name:'United Kingdom', pop:71,share:24},
    {iso:'US',name:'United States',  pop:62,share:17},
    {iso:'DE',name:'Germany',        pop:68,share:12},
    {iso:'NL',name:'Netherlands',    pop:64,share: 7},
    {iso:'FR',name:'France',         pop:60,share: 6},
    {iso:'BE',name:'Belgium',        pop:58,share: 4},
    {iso:'JP',name:'Japan',          pop:56,share: 3},
  ],
  rl_03: [ // Desire · Caroline Polachek — global breakout
    {iso:'US',name:'United States',  pop:90,share:34},
    {iso:'GB',name:'United Kingdom', pop:84,share:14},
    {iso:'BR',name:'Brazil',         pop:78,share: 7},
    {iso:'MX',name:'Mexico',         pop:74,share: 6},
    {iso:'AU',name:'Australia',      pop:78,share: 5},
    {iso:'DE',name:'Germany',        pop:72,share: 5},
    {iso:'FR',name:'France',         pop:70,share: 4},
    {iso:'PH',name:'Philippines',    pop:68,share: 3},
  ],
  rl_04: [ // Devotion · Tirzah — UK indie
    {iso:'GB',name:'United Kingdom', pop:62,share:32},
    {iso:'US',name:'United States',  pop:48,share:22},
    {iso:'DE',name:'Germany',        pop:54,share: 9},
    {iso:'FR',name:'France',         pop:51,share: 7},
    {iso:'NL',name:'Netherlands',    pop:50,share: 5},
    {iso:'AU',name:'Australia',      pop:46,share: 4},
  ],
  rl_05: [ // Far In · Helado Negro — Latin America strong
    {iso:'US',name:'United States',  pop:52,share:24},
    {iso:'MX',name:'Mexico',         pop:64,share:14},
    {iso:'AR',name:'Argentina',      pop:58,share:10},
    {iso:'CO',name:'Colombia',       pop:54,share: 8},
    {iso:'CL',name:'Chile',          pop:52,share: 6},
    {iso:'ES',name:'Spain',          pop:50,share: 6},
    {iso:'BR',name:'Brazil',         pop:48,share: 5},
  ],
  rl_06: [ // BUBBA · KAYTRANADA — global
    {iso:'US',name:'United States',  pop:91,share:31},
    {iso:'CA',name:'Canada',         pop:88,share:11},
    {iso:'GB',name:'United Kingdom', pop:80,share:10},
    {iso:'FR',name:'France',         pop:78,share: 8},
    {iso:'DE',name:'Germany',        pop:74,share: 6},
    {iso:'AU',name:'Australia',      pop:76,share: 5},
    {iso:'JP',name:'Japan',          pop:70,share: 4},
    {iso:'BR',name:'Brazil',         pop:68,share: 4},
  ],
  rl_07: [ // EP2 · Yaeji — KR/US electronic
    {iso:'US',name:'United States',  pop:68,share:28},
    {iso:'KR',name:'South Korea',    pop:74,share:18},
    {iso:'GB',name:'United Kingdom', pop:64,share: 9},
    {iso:'DE',name:'Germany',        pop:60,share: 7},
    {iso:'JP',name:'Japan',          pop:62,share: 6},
    {iso:'FR',name:'France',         pop:58,share: 5},
  ],
  rl_08: [ // I AM · Sault — UK strong, US/EU
    {iso:'GB',name:'United Kingdom', pop:80,share:28},
    {iso:'US',name:'United States',  pop:70,share:24},
    {iso:'NL',name:'Netherlands',    pop:68,share: 7},
    {iso:'FR',name:'France',         pop:64,share: 6},
    {iso:'DE',name:'Germany',        pop:62,share: 5},
    {iso:'AU',name:'Australia',      pop:62,share: 4},
  ],
};
} catch(e) { console.warn('[release-platforms] init skipped:', e.message); }
