import { TextChannel } from "discord.js";
import { CClient, Modul } from "../utils/types";
import { betterFetch, log, sendWithoutReply } from "../utils/utils";

let client: CClient;

const najdiClanek = /href="(?<odkaz>.+?)">\n *<h2>(?<nazev>.+?)<\/h2>/;

let posledniNazev: string;
let posledniOdkaz: string;

async function zkontrolovatNovinky() {
	const stranka = await betterFetch("https://histmy.eu/BUM/clanky")
		.then(r => r.text())
		.catch(e => log("chyba pri accessovani BUM stránky", e));

	const nazevAOdkaz = najdiClanek.exec(stranka || "");

	if (!nazevAOdkaz || !nazevAOdkaz.groups) return false;

	const nazevClanku = nazevAOdkaz.groups.nazev;
	const odkazClanku = "https://histmy.eu/BUM/" + nazevAOdkaz.groups.odkaz;

	if (!nazevClanku) {
		log(new Error("neni nazev clanku"));
		return false;
	}

	// Při spuštění bota
	if (!posledniNazev) {
		posledniNazev = nazevClanku;
		posledniOdkaz = odkazClanku;
		return false;
	}

	// Pokud vyšel nový článek
	if (posledniNazev !== nazevClanku) {
		posledniNazev = nazevClanku;
		posledniOdkaz = odkazClanku;
		return true;
	}

	return false;
}

async function naplanovat() {
	setTimeout(urobit, 5 * 1000 * 60);
}

async function urobit() {
	const guilda = client.guilds.cache.get("555779161067749446");

	if (!guilda) return log(new Error("dobytcarna nenalezena"));

	const novyClanek = await zkontrolovatNovinky();

	if (!novyClanek) {
		naplanovat();
		return;
	}

	const zprava = `Vyšel nový článek v kvalitním magazínu BUM: **${posledniNazev}**\nPřečtěte si ho zde: ${posledniOdkaz}`;

	const general = guilda.channels.cache.get("555779161067749448") as TextChannel;
	if (!general) return log(new Error("general nenalezen"));
	sendWithoutReply(general, `<@&1313491870231564318>\n${zprava}`);

	naplanovat();
}

const exp: Modul = {
	on_clientReady: () => {
		client = module.exports.client;

		urobit();
	}
};

module.exports = exp;
