package authoritymanager.client;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;

public class AuthorityManagerView extends Composite {
	private AuthorityManagerController controller ;
	
	private StatusMonitor statusMonitor ;
	
	private VerticalPanel pnlMain ;
	private VerticalPanel pnlPage ;
	
	private Label lblStatus ;
	
	private TitlePage titlePage ;
	private MenuPage menuPage ;
	private ServerStatusPage serverStatusPage ;
	private RegisterPage registerPage ;
	private UploadPage uploadPage ;
	private SearchPage searchPage ;
	private ManagePage managePage ;
	private AddRecordPage addRecordPage ;
	private StatisticsPage statisticsPage ;
	private LoginPage loginPage ;
	private SignupPage signupPage ;
	private LogoutPage logoutPage ;	
	
	private XMLContentPage xmlContentPage ;
	private SearchResultsPage searchResultsPage ;
	private SearchDetailsPage searchDetailsPage ;
	private EditPage editPage ;
	
	public AuthorityManagerView(AuthorityManagerController controller) {
		super() ;
		controller.setView(this) ;
		this.controller = controller ;		
	}
	
	public void initialize() {
		pnlMain = new VerticalPanel() ;		
		
		pnlMain.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER) ;
		pnlMain.setSpacing(3) ;
		
		HorizontalPanel pnlTitle = new HorizontalPanel() ;
		titlePage = new TitlePage(this) ;
		pnlTitle.add(titlePage) ;
		lblStatus = new Label() ;
		pnlTitle.add(lblStatus) ;
		pnlMain.add(pnlTitle) ;
		
		menuPage = new MenuPage(this) ;
		pnlMain.add(menuPage) ;
		
		pnlPage = new VerticalPanel() ;
		pnlPage.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER) ;
		pnlPage.setSpacing(3) ;
		pnlMain.add(pnlPage) ;
		
		serverStatusPage = new ServerStatusPage(this) ;
		registerPage = new RegisterPage(this) ;
		searchPage = new SearchPage(this) ;
		managePage = new ManagePage(this) ;
		addRecordPage = new AddRecordPage(this) ;
		statisticsPage = new StatisticsPage(this) ;
		logoutPage = new LogoutPage(this) ;
		uploadPage = new UploadPage(this) ;
		loginPage = new LoginPage(this) ;
		signupPage = new SignupPage(this) ;
		
		xmlContentPage = new XMLContentPage(this) ;		
		searchResultsPage = new SearchResultsPage(this) ;
		searchDetailsPage = new SearchDetailsPage(this) ;
		editPage = new EditPage(this) ;
		
		statusMonitor = new StatusMonitor(this) ;
		
		initWidget(pnlMain) ;
		
		initApplication() ;
	}
	
	private void initApplication() {
		statusMonitor.schedule(50) ;
		showLoginPage() ;
	}
	
	public AuthorityManagerController getController() {
		return this.controller ;
	}

	public void show(Page page) {
		pnlPage.clear() ;
		pnlPage.add(page) ;		
	}
	
	public void showStatisticsPage() {
		show(statisticsPage) ;
	}

	public void showLogoutPage() {
		show(logoutPage) ;
	}

	public void showAddRecordPage(String itemType) {		
		addRecordPage.setType(itemType) ;
		show(addRecordPage) ;	
	}

	public void showManagePage(String itemType) {		
		managePage.setType(itemType) ;
		show(managePage) ;
	}

	public void showSearchPage() {
		show(searchPage) ;
	}

	
	public void showRegisterPage() {
		show(registerPage) ;
	}

	public void showUploadPage() {
		show(uploadPage) ;
	}
	
	public void showLoginPage() {
		loginPage.show() ;
	}
	
	public void showSignupPage() {
		signupPage.show() ;
	}
	

	public void showSearchResultsPage(SearchResults results) {
		searchResultsPage.setResults(results) ;
		show(searchResultsPage) ;
	}

	public void setStatus(String status) {
		lblStatus.setText(status) ;
	}

	public void showXMLContentPage(String URL) {
		xmlContentPage.show(URL) ;
	}

	public void showSearchDetailsPage(String itemType, String itemID) {
		searchDetailsPage.show(itemType, itemID) ;
	}

	public void showEditPage(String itemType, String id) {
		editPage.show(itemType, id) ;
		
	}

	public void showServerStatusPage() {
		show(serverStatusPage) ;
	}
}
