package com.gitblit.wicket;

import java.util.Date;
import java.util.TimeZone;

import org.apache.wicket.markup.html.WebPage;

import com.gitblit.IStoredSettings;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IFederationManager;
import com.gitblit.manager.IFilestoreManager;
import com.gitblit.manager.IGitblit;
import com.gitblit.manager.INotificationManager;
import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IProjectManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IServicesManager;
import com.gitblit.manager.IUserManager;
import com.gitblit.tickets.ITicketService;
import com.gitblit.transport.ssh.IPublicKeyManager;
import com.gitblit.utils.XssFilter;

public interface GitblitWicketApp {

	public abstract void mount(String location, Class<? extends WebPage> clazz, String... parameters);

	public abstract Class<? extends WebPage> getHomePage();

	public abstract boolean isCacheablePage(String mountPoint);

	public abstract CacheControl getCacheControl(String mountPoint);

	public abstract IStoredSettings settings();

	public abstract XssFilter xssFilter();

	/**
	 * Is Gitblit running in debug mode?
	 *
	 * @return true if Gitblit is running in debug mode
	 */
	public abstract boolean isDebugMode();

	/*
	 * These methods look strange... and they are... but they are the first
	 * step towards modularization across multiple commits.
	 */
	public abstract Date getBootDate();

	public abstract Date getLastActivityDate();

	public abstract IRuntimeManager runtime();

	public abstract IPluginManager plugins();

	public abstract INotificationManager notifier();

	public abstract IUserManager users();

	public abstract IAuthenticationManager authentication();

	public abstract IPublicKeyManager keys();

	public abstract IRepositoryManager repositories();

	public abstract IProjectManager projects();

	public abstract IFederationManager federation();

	public abstract IGitblit gitblit();

	public abstract IServicesManager services();

	public abstract ITicketService tickets();

	public abstract TimeZone getTimezone();
	
	public abstract IFilestoreManager filestore();

}