/**
* RÁDIO AZUL 98.9 FM - JS INDEX (PÁGINA PRINCIPAL)
* Player, música atual, histórico recente, notícias, etc.
*/
let audioPlaying = false;
let lastSongTitle = "";
let isProgramaAtivo = false;
let localHistory = [];
let noticias = [];
let scheduleData = [];
let currentMusic = { titulo: "Rádio Azul", artista: "Emissão em direto", capa: "https://i.postimg.cc/PrMhmWMz/logo.png" };
// ==================== MÚSICA ATUAL ====================
async function obterMusicaAtual() {
try {
const res = await fetch(`${API_MUSICA}?action=current`, { cache: 'no-store' });
const data = await res.json();
if (data && data.titulo && data.artista) {
return { titulo: data.titulo, artista: data.artista, capa: data.capa || null };
}
} catch(e) { console.warn(e); }
return { titulo: "Rádio Azul", artista: "Emissão em direto", capa: null };
}
async function getCapaFromServer(artista, titulo) {
if (!artista || !titulo) return null;
try {
const url = `${API_MUSICA}?action=get_capa&artista=${encodeURIComponent(artista)}&titulo=${encodeURIComponent(titulo)}`;
const res = await fetch(url);
const data = await res.json();
return data.capa;
} catch(e) { return null; }
}
async function refreshMusica() {
const musica = await obterMusicaAtual();
const tituloCompleto = `${musica.artista} - ${musica.titulo}`;
const isDefault = (musica.titulo === "Rádio Azul" && musica.artista === "Emissão em direto");
function clearHistory() {
if (confirm("Limpar todo o histórico de músicas?")) {
fetch(`${API_MUSICA}?action=clear_history`, { method: 'POST' }).catch(e=>console.warn);
localStorage.removeItem('radio_local_history');
carregarLocalHistoryIndex();
showToast("Histórico limpo!");
}
}
function addToRecentIndex(title, artist, capaUrl) {
let recentTracks = JSON.parse(localStorage.getItem('recent_tracks') || '[]');
if (recentTracks.length > 0 && recentTracks[0].title === title && recentTracks[0].artist === artist) return;
recentTracks.unshift({ title, artist, time: new Date().toLocaleTimeString(), capa: capaUrl || "https://i.postimg.cc/PrMhmWMz/logo.png" });
if (recentTracks.length > 10) recentTracks.pop();
localStorage.setItem('recent_tracks', JSON.stringify(recentTracks));
renderRecentModalIndex();
}
// ==================== PROGRAMAÇÃO ====================
function timeToMinutesIndex(t) {
if (!t) return 0;
let [h, m] = t.split(':');
return parseInt(h) * 60 + parseInt(m);
}
function getDefaultScheduleIndex() {
const raw = [
"DOM. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul",
"SEG. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul",
"TER. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul",
"QUA. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul",
"QUI. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul",
"SEX. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul",
"SAB. | 00:00-01:00 | A Rádio de Todos os Sons | Rádio Azul"
];
const diasMap = { "DOM": 0, "SEG": 1, "TER": 2, "QUA": 3, "QUI": 4, "SEX": 5, "SAB": 6 };
return raw.map(line => {
let parts = line.split('|').map(s => s.trim());
let diaAbrev = parts[0].replace('.', '');
let diaNum = diasMap[diaAbrev];
let [start, end] = parts[1].split('-');
return { day: diaNum, start, end, program: parts[2], host: parts[3] };
});
}
async function carregarScheduleIndex() {
const data = await callAPI(`${API_PROGRAMACAO}?action=read`);
if (data && Array.isArray(data) && data.length) {
scheduleData = data;
} else {
let stored = localStorage.getItem('radio_schedule_data');
scheduleData = (stored && cookieConsent === 'accepted') ? JSON.parse(stored) : getDefaultScheduleIndex();
}
updateProgramDisplayIndex();
}
function updateProgramDisplayIndex() {
let now = new Date(), day = now.getDay(), mins = now.getHours() * 60 + now.getMinutes();
let cur = scheduleData.find(p => p.day === day && mins >= timeToMinutesIndex(p.start) && mins < timeToMinutesIndex(p.end));
if (!cur) cur = { program: "Emissão online", host: "Rádio Azul", start: "--:--", end: "--:--" };
document.getElementById('progAtual').innerHTML = `${escapeHtml(cur.program)}${cur.program !== "Emissão online" ? ' 🔴 NO AR' : ''} ${escapeHtml(cur.host)}`;
let next = scheduleData.find(p => p.day === day && timeToMinutesIndex(p.start) > mins);
if (!next) next = scheduleData.find(p => p.day === (day + 1) % 7);
document.getElementById('progSeguinte').innerHTML = next ? `${escapeHtml(next.program)} ${next.start}` : "--";
}
function getCurrentProgramFromScheduleIndex() {
let now = new Date(), day = now.getDay(), mins = now.getHours() * 60 + now.getMinutes();
let cur = scheduleData.find(p => p.day === day && mins >= timeToMinutesIndex(p.start) && mins < timeToMinutesIndex(p.end));
if (!cur) cur = { program: "Emissão online", host: "Rádio Azul", start: "--:--", end: "--:--" };
return cur;
}
function renderScheduleModalIndex(day) {
let now = new Date();
let currentMins = now.getHours() * 60 + now.getMinutes();
let currentDay = now.getDay();
let filtered = scheduleData.filter(p => p.day === day).sort((a, b) => a.start.localeCompare(b.start));
let dias = ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'];
let html = `
${dias.map((d, idx) => ``).join('')}
Horário
Programa
Locutor
`;
filtered.forEach(p => {
let isCurrent = (day === currentDay && currentMins >= timeToMinutesIndex(p.start) && currentMins < timeToMinutesIndex(p.end));
let emDiretoTag = isCurrent ? ' 🔴 EM DIRETO' : '';
html += `