package com.springone.myrestaurants.web;

import java.util.Set;

import org.joda.time.format.DateTimeFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.convert.converter.Converter;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;

import com.springone.myrestaurants.dao.RestaurantDao;
import com.springone.myrestaurants.dao.UserAccountDao;
import com.springone.myrestaurants.domain.Restaurant;
import com.springone.myrestaurants.domain.UserAccount;

public class BaseApplicationController {

	@Autowired
	RestaurantDao restaurantDao;

	@Autowired
	UserAccountDao userAccountDao;

	@ModelAttribute("currentUserAccountId")
	public String populateCurrentUserName() {
		String currentUser = SecurityContextHolder.getContext()
				.getAuthentication().getName();
		UserAccount userAccount = userAccountDao.findByName(currentUser);
		if (userAccount != null) {
			return userAccount.getId().toString();
		} else {
			return "USER-ID-NOT-AVAILABLE";
		}
	}

	void addDateTimeFormatPatterns(Model model) {
		model.addAttribute(
				"userAccount_birthdate_date_format",
				DateTimeFormat.patternForStyle("S-",
						LocaleContextHolder.getLocale()));
	}

	protected Converter<Restaurant, String> getRestaurantConverter() {
		return new Converter<Restaurant, String>() {
			public String convert(Restaurant restaurant) {
				return new StringBuilder().append(restaurant.getName())
						.append(" ").append(restaurant.getCity()).append(" ")
						.append(restaurant.getState()).toString();
			}
		};
	}
	
	/*
	protected Converter<Set<Restaurant>, String> getRestaurantSetConverter() {
		return new Converter<Set<Restaurant>, String>() {
			public String convert(Set<Restaurant> restaurants) {
				StringBuilder sb = new StringBuilder();
				for (Restaurant restaurant : restaurants) {
					
				
					sb.append(restaurant.getName())
						.append(" ").append(restaurant.getCity()).append(" ")
						.append(restaurant.getState()).toString();
				}
				return sb.toString();
			}
		};
	}*/

}
