package kr.dashtech.sansotong;

//import kr.dashtech.sansotong.view.diveLog.LogMain;
//import kr.dashtech.sansotong.view.Login.JoinType;
//import kr.dashtech.sansotong.view.Login.JoinTerms;
//import kr.dashtech.sansotong.view.Login.JoinInInfo;
//import kr.dashtech.sansotong.view.Login.JoinCoOk;
//import kr.dashtech.sansotong.view.Login.*;
import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import kr.dashtech.sansotong.dataHandle.BlogDocDao;
import kr.dashtech.sansotong.view.StartView;
import kr.dashtech.sansotong.view.Login.*;
import kr.dashtech.sansotong.view.MyInfo.*;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.annotations.Theme;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.View;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Tree;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

@Component 
@Scope("prototype")
@Theme("sansotong")
public class SansotongUI extends UI {

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 3955926699031859598L;
	@AutoGenerated
	private AbsoluteLayout mainLayout;
	@AutoGenerated
	private Panel pnl_Main;
	@AutoGenerated
	private AbsoluteLayout absoluteLayout_7;
	@AutoGenerated
	private Panel pnl_view;
	@AutoGenerated
	private AbsoluteLayout absoluteLayout_6;
	@AutoGenerated
	private Panel pnl_Photo;
	@AutoGenerated
	private AbsoluteLayout absoluteLayout_5;
	@AutoGenerated
	private Embedded ebd_photo;
	@AutoGenerated
	private Panel pnl_Manu;
	@AutoGenerated
	private AbsoluteLayout absoluteLayout_4;
	@AutoGenerated
	private Panel pnl_tree;
	@AutoGenerated
	private VerticalLayout verticalLayout_1;
	@AutoGenerated
	private Tree tree_menu;
	@AutoGenerated
	private TextField txt_search;
	@AutoGenerated
	private Button btn_search;
	Navigator navigator;
	
	@Autowired
    private transient ApplicationContext applicationContext;

    
	// 화면 목록
	HashMap<String, Class<? extends View>> routes = new HashMap<String, Class<? extends View>>() {
        {
            put("/JoinType", JoinType.class);
            put("/JoinTerms", JoinTerms.class);
            put("/JoinInInfo", JoinInInfo.class);
            put("/JoinCoTerms", JoinCoTerms.class);
            put("/JoinCoOk", JoinCoOk.class);
            put("/JoinCoInID", JoinCoInID.class);
            put("/JoinInCoInfo", JoinInCoInfo.class);
            put("/FindIdPwd", FindIdPwd.class);
            put("/JoinOut", JoinOut.class);
            put("/MyInfo", MyInfo.class);
            put("/DiverInfo", DiverInfo.class);
            put("/FriendList", FriendList.class);
        }
    };
	
	@Override
	protected void init(VaadinRequest request) {
		getPage().setTitle("산소통 웹 사이트");	// 웹 이름
		
		buildMainLayout();	// 화면 나타낸다.

		setContent(mainLayout);	// 화면을 올린 컨텐츠
	}

	@AutoGenerated
	private AbsoluteLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new AbsoluteLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		
		// top-level component properties
		//setWidth("1208px");
		//setHeight("100.0%");
		mainLayout.setSizeFull();
		
		// 메인 판넬
		pnl_Main = buildPnl_Main();
		mainLayout.addComponent(pnl_Main, "top:2.0px;left:2.0px;");
		
		
		return mainLayout;
	}
	
	@AutoGenerated
	private Panel buildPnl_Main() {
		// common part: create layout
		pnl_Main = new Panel();
		pnl_Main.setImmediate(false);
		pnl_Main.setWidth("1165px");
		pnl_Main.setHeight("765px");	
		
		// absoluteLayout_4
		absoluteLayout_7 = buildAbsoluteLayout_7();
		pnl_Main.setContent(absoluteLayout_7);
		
		return pnl_Main;
	}
	
	@AutoGenerated
	private AbsoluteLayout buildAbsoluteLayout_7() {
		// common part: create layout
		absoluteLayout_7 = new AbsoluteLayout();
		absoluteLayout_7.setImmediate(false);
		absoluteLayout_7.setWidth("100%");
		absoluteLayout_7.setHeight("100%");		
				
		// pnl_Photo 맨위 그림
		pnl_Photo = buildPnl_Photo();
		absoluteLayout_7.addComponent(pnl_Photo, "top:20.0px;left:20.0px;");
		
		// pnl_Manu 왼쪽 메뉴
		pnl_Manu = buildPnl_Manu();
		absoluteLayout_7.addComponent(pnl_Manu, "top:140.0px;left:21.0px;");
		
		// pnl_view 뷰 화면
		pnl_view = buildPnl_view();
		absoluteLayout_7.addComponent(pnl_view, "top:140.0px;left:340.0px;");
		
		
		return absoluteLayout_7;
	}
	
	@AutoGenerated
	private Panel buildPnl_Photo() {
		// common part: create layout
		pnl_Photo = new Panel();
		pnl_Photo.setImmediate(false);
		pnl_Photo.setWidth("1120px");
		pnl_Photo.setHeight("100px");
		
		// absoluteLayout_5
		absoluteLayout_5 = buildAbsoluteLayout_5();
		pnl_Photo.setContent(absoluteLayout_5);
		
		return pnl_Photo;
	}

	@AutoGenerated
	private AbsoluteLayout buildAbsoluteLayout_5() {
		// common part: create layout
		absoluteLayout_5 = new AbsoluteLayout();
		absoluteLayout_5.setImmediate(false);
		absoluteLayout_5.setWidth("100.0%");
		absoluteLayout_5.setHeight("100.0%");
		
		// ebd_photo
		ebd_photo = new Embedded();
		ebd_photo.setImmediate(false);
		ebd_photo.setWidth("1116px");
		ebd_photo.setHeight("96px"); 
		ebd_photo.setSource(new ThemeResource("img/sea.png"));	// 이미지
		ebd_photo.setType(1);
		ebd_photo.setMimeType("image/png");
		absoluteLayout_5.addComponent(ebd_photo, "top:1.0px;left:1.0px;");
		
		return absoluteLayout_5;
	}

	@AutoGenerated
	private Panel buildPnl_Manu() {
		// common part: create layout
		pnl_Manu = new Panel();
		pnl_Manu.setImmediate(false);
		pnl_Manu.setWidth("299px");
		pnl_Manu.setHeight("600px");
		
		// absoluteLayout_4
		absoluteLayout_4 = buildAbsoluteLayout_4();
		pnl_Manu.setContent(absoluteLayout_4);
		
		return pnl_Manu;
	}

	@AutoGenerated
	private AbsoluteLayout buildAbsoluteLayout_4() {
		// common part: create layout
		absoluteLayout_4 = new AbsoluteLayout();
		absoluteLayout_4.setImmediate(false);
		absoluteLayout_4.setWidth("100.0%");
		absoluteLayout_4.setHeight("100.0%");		

		// txt_search 검색 텍스트 박스
		txt_search = new TextField();
		txt_search.setImmediate(false);
		txt_search.setWidth("180px");
		txt_search.setHeight("-1px");
		absoluteLayout_4.addComponent(txt_search, "top:14.0px;left:18.0px;");
		
		// btn_search 검색 버튼
		btn_search = new Button();
		btn_search.setCaption("검색");
		btn_search.setImmediate(true);
		btn_search.setWidth("-1px");
		btn_search.setHeight("-1px");
		absoluteLayout_4.addComponent(btn_search, "top:14.0px;left:222.0px;");
		
		
		// pnl_tree 트리 메뉴
		pnl_tree = buildPnl_tree();
		absoluteLayout_4.addComponent(pnl_tree, "top:48.0px;left:18.0px;");
		
		return absoluteLayout_4;
	}

	@AutoGenerated
	private Panel buildPnl_tree() {
		// common part: create layout
		pnl_tree = new Panel();
		pnl_tree.setImmediate(false);
		pnl_tree.setWidth("260px");
		pnl_tree.setHeight("531px");
		
		// verticalLayout_1
		verticalLayout_1 = buildVerticalLayout_1();
		pnl_tree.setContent(verticalLayout_1);
		
		return pnl_tree;
	}

	@Autowired
	BlogDocDao blogDocDao;
	
	@SuppressWarnings("deprecation")
	@AutoGenerated
	private VerticalLayout buildVerticalLayout_1() {
		

		if(blogDocDao == null)
		{
			System.out.println("");
		}
		else System.out.println("");
		
		

		//List<BlogDoc> result = blogDocDao.searchBlogPostList(null);
		
		// common part: create layout
		verticalLayout_1 = new VerticalLayout();
		verticalLayout_1.setImmediate(false);
		verticalLayout_1.setWidth("90.0%");
		verticalLayout_1.setHeight("90.0%");
		verticalLayout_1.setMargin(true);
		
		// tree_menu
		tree_menu = new Tree();
		tree_menu.setImmediate(false);
		tree_menu.setWidth("-1px");
		tree_menu.setHeight("-1px");
		
		// 메누 리스트
		final Object[][] menu = new Object[][]{
				new Object[]{"로그인 / 나의정보", "로그인 관리", "회원 가입", "아이디 / 패스워드 찾기", "회원 탈퇴"},
				new Object[]{"로그인 / 나의정보", "나의 정보 관리", "가입 정보", "Diver 정보","Dive 장비 정보","친구 목록", "나의 모임", "메시지 목록" },
				new Object[]{"다이버 블로그", "블로그 설정", "공개 범위 성정", "블로그 기본 정보 설정"},
				new Object[]{"다이버 블로그", "Dive Log", "Dive Log 작성", "Dive Log 인증", "Dive Log 목록 보기", "기간 별 Dive Log 목록 보기", 
						      "지역 별 Dive Log 목록 보기", "깊이 별 Dive Log 목록 보기", "Dive 로그 비교", "Dive Log 상세 보기"},
				new Object[]{"다이버 블로그", "블로그 작성"},
				new Object[]{"Dive Shop 정보", "정보 관리", "기본정보 등록/수정", "Shop Dive Point 목록 조회", "Shop Dive Point 상세정보 조회", 
						      "Shop Dive Point 기본정보 등록", "Shop Dive Point 지형도 작성", "Shop Dive Point 수정", "Shop Dive Point 삭제"},
				new Object[]{"Dive Shop 정보", "Dive Shop 소개", "기본정보 보기", "제공 서비스 보기", "위치 및 찾아가기 보기", "Dive Point 소개"},
				new Object[]{"Dive Shop 정보", "예약 관리", "투어 일정 등록", "투어 일정 목록 보기", "투어 일정 상세 정보 보기", "고객 예약 요청 작성", "고객 예약 요청 목록 보기",
					          "고객 예약 요청 상세 정보 보기", "고객 예약 완료 목록 보기", "고객 예약 완료 상세 정보 보기", "완료 된 고객 예약 수정 요청", "완료 된 고객 예약 수정"},
				new Object[]{"Dive 정보 관리", "Dive Point 관리", "Dive Point 목록 조회", "Dive Point 상세정보 조회", "Dive Point 기본정보 등록", 
						      "Dive Point 지형도 작성", "Dive Point 수정", "Dive Point 삭제"},
				new Object[]{"Dive 정보 관리", "장비 목록 관리", "장비 목록 보기", "장비 상세 정보 보기", "장비 정보 수정", "신규 장비 등록"},
				new Object[]{"Dive 정보 관리", "수중 생물 도감 관리", "수중 생물 목록 보기", "수중 생물 상세 정보 보기", "수중 생물 정보 수정"},
				new Object[]{"버디 구하기", "버디 구하기 등록", "버디 구하기 응답(버디신청)"},
				new Object[]{"블로그 Site 통합 조회", "조회", "게시물 조회", "이미지 조회"},
				new Object[]{"모임", "모임 관리", "사용자 모임 등록", "가입된 사용자 권한 관리", "모임 소개 관리"},
				new Object[]{"모임", "모임 블로그", "블로그 작성", "모임 이미지 조회", "모임 투어 일정 관리"},
		};				
		
		// 트리 구조 생성
		/* Add planets as root items in the tree. */
		for (int i=0; i<menu.length; i++) {
			String sub = (String) (menu[i][0]);
			tree_menu.addItem(sub);
			if (menu[i].length == 1) {
				// The planet has no moons so make it a leaf.
				tree_menu.setChildrenAllowed(sub, false);
			} else if(menu[i].length == 2) {
				// Add children (menu) under the planets.				
				String sub1 = (String) menu[i][1];
				// Add the item as a regular item.
				tree_menu.addItem(sub1);
				// Set it to be a child.
				tree_menu.setParent(sub1, sub);
				// Make the sub1 look like leaves.
				tree_menu.setChildrenAllowed(sub1, false);
				// Expand the subtree.
				tree_menu.expandItemsRecursively(sub);
			}
			else{
				String sub1 = (String) menu[i][1];
				// Add the item as a regular item.
				tree_menu.addItem(sub1);
				// Set it to be a child.
				tree_menu.setParent(sub1, sub);
				for (int j=2; j<menu[i].length; j++) {
					String sub2 = (String)menu[i][j];
					// Add the item as a regular item.
					tree_menu.addItem(sub2);
					// Set it to be a child.
					tree_menu.setParent(sub2, sub1);
					// Make the sub1 look like leaves.
					tree_menu.setChildrenAllowed(sub2, false);
					// Expand the subtree.
					tree_menu.expandItemsRecursively(sub);
				}
			}
		}
		
		// 트리 리스너
		tree_menu.addListener(new ItemClickListener() {
			public void itemClick(ItemClickEvent event){
				Object itemId = event.getItemId();
				System.err.println("Clicked " + itemId);
				
				if(itemId == "회원 가입"){
					navigator.navigateTo("/JoinType");
				}
				else if(itemId == "친구 목록"){
					navigator.navigateTo("/FriendList");
				}
				else if(itemId == "아이디 / 패스워드 찾기"){
					navigator.navigateTo("/FindIdPwd");					
				}
				else if(itemId =="회원 탈퇴"){
					navigator.navigateTo("/JoinOut");						
				}
				else if(itemId =="가입 정보"){
					navigator.navigateTo("/MyInfo");
				}		
				else if(itemId =="Diver 정보"){
					navigator.navigateTo("/DiverInfo");
				}			
			}
		});
		verticalLayout_1.addComponent(tree_menu);
		
		// 네뉴를 최소화한다.
		tree_menu.collapseItem("로그인 / 나의정보");
		tree_menu.collapseItem("로그인 관리");
		tree_menu.collapseItem("나의 정보 관리");
		tree_menu.collapseItem("다이버 블로그");
		tree_menu.collapseItem("블로그 설정");
		tree_menu.collapseItem("Dive Log");
		tree_menu.collapseItem("블로그 작성");
		tree_menu.collapseItem("Dive Shop 정보");
		tree_menu.collapseItem("정보 관리");
		tree_menu.collapseItem("Dive Shop 소개");
		tree_menu.collapseItem("예약 관리");
		tree_menu.collapseItem("Dive 정보 관리");
		tree_menu.collapseItem("Dive Point 관리");
		tree_menu.collapseItem("장비 목록 관리");
		tree_menu.collapseItem("수중 생물 도감 관리");
		tree_menu.collapseItem("버디 구하기");
		tree_menu.collapseItem("버디 구하기 등록");
		tree_menu.collapseItem("블로그 Site 통합 조회");
		tree_menu.collapseItem("조회");
		tree_menu.collapseItem("모임");
		tree_menu.collapseItem("모임 관리");
		tree_menu.collapseItem("모임 블로그");
		
		return verticalLayout_1;
	}

	

	@AutoGenerated
	private Panel buildPnl_view() {
		// common part: create layout
		pnl_view = new Panel();
		pnl_view.setImmediate(false);
		pnl_view.setWidth("800px");
		pnl_view.setHeight("600px");
		
		// absoluteLayout_6
		absoluteLayout_6 = new AbsoluteLayout();
		absoluteLayout_6.setImmediate(false);
		absoluteLayout_6.setWidth("100.0%");
		absoluteLayout_6.setHeight("100.0%");
		pnl_view.setContent(absoluteLayout_6);
		
		// Create a navigator to control the views
		navigator = new Navigator(this, pnl_view);
		// Create and register the views
		navigator.addView("", new StartView());
		
		// 모든 뷰를 로딩한다.
		for (String route : routes.keySet()) {
			navigator.addView(route, routes.get(route));
        }
		//navigator.addView(MAINVIEW, new FriendList());
		
		return pnl_view;
	}
}