import GameServerProfile from './profile';
import { shell, ipcRenderer } from 'electron';
import { switchPage } from '../customEvents';
import { NewsType } from './news';
import { makeOnlineCounterList, OnlineListParser } from './onlineCount';
import { socialLink } from './socialLink';
import { PageController } from './serverView/controller';
export default class GameServer {
public pageController:PageController;
constructor(
public profile: GameServerProfile,
public menuName: string,
public name: string,
public shortDescription: string,// the server in 1-2 sentences
public newsPageUrl: string,
public newsLatestPage: { url: string, type: NewsType },
public backgrounds: { isVideo: boolean, file: string }[],
public icon: string,
public socialLinks: socialLink[],
public TOSLink: string,
public OnlineList: { parser: OnlineListParser, url: string },
) {
this.pageController = new PageController(this);
}
getMenuEntry(): HTMLElement {
const sidebarItem = document.createElement('div');
sidebarItem.classList.add("sidebarItem");
//Online counter
const OnlineCounterContainer = document.createElement('div');
//OnlineCounterContainer.appendChild(makeOnlineCounterList(this));
sidebarItem.appendChild(OnlineCounterContainer);
//Title
const title = document.createElement('div');
title.classList.add("title");
const titleIMG = document.createElement('img');
titleIMG.src = `./media/server/${this.icon}`;
const titleText = document.createElement('div');
titleText.innerText = this.menuName;
title.appendChild(titleIMG);
title.appendChild(titleText);
title.addEventListener('click', () => {
switchPage("SERVER", this.name, 'INFO');
});
if (this.profile.address != 'noServer') {
let onlineBoxActive: boolean = false;
let onlineBoxSchouldBeActive: boolean = false;
let updateOnlineContainer = async () => {
if (onlineBoxSchouldBeActive == onlineBoxActive) return;
onlineBoxActive = onlineBoxSchouldBeActive;
while (OnlineCounterContainer.firstChild) {
OnlineCounterContainer.removeChild(OnlineCounterContainer.firstChild);
}
if (onlineBoxSchouldBeActive) {
OnlineCounterContainer.appendChild(await makeOnlineCounterList(this));
}
console.log(onlineBoxSchouldBeActive);
}
let SetUpdate = (state: boolean) => {
onlineBoxSchouldBeActive = state;
setTimeout(() => { updateOnlineContainer(); }, 160);
};
title.addEventListener("mouseover", () => {
SetUpdate(true);
});
title.addEventListener("mouseout", () => {
SetUpdate(false);
});
OnlineCounterContainer.addEventListener("mouseover", () => {
SetUpdate(true);
});
OnlineCounterContainer.addEventListener("mouseout", () => {
SetUpdate(false);
});
}
sidebarItem.appendChild(title);
//Collapsable
const container = document.createElement('div');
container.classList.add("colapse");
const info = document.createElement('div');
info.innerHTML = 'Information';
container.appendChild(info);
info.addEventListener('click', () => {
switchPage("SERVER", this.name, "INFO");
});
const news = document.createElement('div');
news.innerHTML = 'News ';
if (this.newsPageUrl && this.newsPageUrl !== null) {
news.addEventListener('click', () => {
shell.openExternal(this.newsPageUrl);
});
} else {
news.hidden = true;
}
container.appendChild(news);
const screenshots = document.createElement('div');
screenshots.innerHTML = 'Screenshots';
container.appendChild(screenshots);
screenshots.addEventListener('click', () => {
switchPage("SERVER", this.name, "SCREENSHOTS");
})
const preferences = document.createElement('div');
if(this.profile.address != 'noServer'){
preferences.innerHTML = 'Preferences';
preferences.addEventListener('click', () => {
switchPage("SERVER", this.name, "PREF");
});
container.appendChild(preferences);
}
sidebarItem.appendChild(container);
//event Target / interactivity
const events = document.createElement('span');
events.classList.add("switch-page-event");
events.addEventListener("site-changed", (event: CustomEvent) => {
sidebarItem.classList.remove("selected");
info.classList.remove("selected");
//news.classList.remove("selected");
screenshots.classList.remove("selected");
preferences.classList.remove("selected");
if (event.detail.sitetype === "SERVER" && event.detail.page === this.name) {
sidebarItem.classList.add("selected");
// if(event.detail.subPage === "NEWS") {
// news.classList.add("selected");
// } else
if (event.detail.subPage === "PREF") {
preferences.classList.add("selected");
} else if (event.detail.subPage === "SCREENSHOTS") {
screenshots.classList.add("selected");
} else {
info.classList.add("selected");
}
}
});
sidebarItem.appendChild(events);
return sidebarItem;
}
play() {
const args: any = JSON.parse(JSON.stringify(this.profile));
args.username = localStorage.getItem("2_username_" + this.profile.address);
args.password = localStorage.getItem("2_pin_" + this.profile.address);
ipcRenderer.send('play', args);
}
}