// ==UserScript==
// @name ManagerZone Training Report Checker
// @namespace http://tampermonkey.net/
// @version 1.8
// @description Check daily training report status and visually indicate readiness
// @author You
// @match *://www.managerzone.com/*
// @grant none
// @license MIT
// @run-at document-end
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
const dayMap = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: null};
function getBrazilianDate() {
const date = new Date();
const utc = date.getTime() + (date.getTimezoneOffset() * 60000);
const brazilTime = new Date(utc + (3600000 * -3));
return brazilTime.toISOString().slice(0, 10); // YYYY-MM-DD format
}
function addTrainingReportLink() {
const targetDiv = document.getElementById('pt-wrapper');
if (targetDiv) {
const link = document.createElement('a');
link.id = 'shortcut_link_trainingreport';
link.title = 'Training Report';
link.href = '/?p=training_report';
link.innerHTML = '| Training';
targetDiv.appendChild(link);
} else {
console.log('Target div not found.');
return;
}
}
function updateTrainingReportIcon(isReady) {
const icon = document.querySelector('#shortcut_link_trainingreport i');
if (icon) {
icon.className = isReady ? 'fa fa-unlock' : 'fa fa-lock';
}
}
function isReportReady(table) {
return Array.from(table.querySelectorAll('tr')).some(row => row.querySelector('img[src*="training_camp.png"]'));
}
function isWithinCheckWindow() {
const currentHour = new Date().getHours();
return (currentHour >= 19 || currentHour <= 0);
}
function markReportAsChecked() {
const today = getBrazilianDate();
localStorage.setItem('reportCheckedDate', today);
updateTrainingReportIcon(true);
}
function hasReportBeenCheckedToday() {
const today = getBrazilianDate();
return localStorage.getItem('reportCheckedDate') === today;
}
async function checkTrainingReport() {
const today = getBrazilianDate();
const dayIndex = dayMap[new Date().getDay()];
if (!dayIndex || !isWithinCheckWindow()) {
console.log('No need to check training report. It is either Saturday or outside of the checking window (7 PM - 1 AM).');
return;
}
if (hasReportBeenCheckedToday()) {
console.log('Training Report has already been checked today.');
updateTrainingReportIcon(true);
return;
}
try {
const response = await fetch(`https://www.managerzone.com/ajax.php?p=trainingReport&sub=daily&sport=soccer&day=${dayIndex}&sort_order=desc&sort_key=modification&player_sort=all`);
const text = await response.text();
const parser = new DOMParser();
const doc = parser.parseFromString(text, "text/html");
const table = doc.querySelector("body > table:nth-child(3)");
if (table && isReportReady(table)) {
console.log('Report is ready.');
markReportAsChecked();
} else {
console.log('No report yet. Will check again in 5 minutes.');
setTimeout(checkTrainingReport, 300000); /* Will check again in 5 minutes */
}
} catch (error) {
console.error('Error fetching training report:', error);
}
}
function init() {
addTrainingReportLink();
if (hasReportBeenCheckedToday()) {
updateTrainingReportIcon(true);
}
checkTrainingReport();
}
init();
})();