package petshop.presentation.code;

import java.sql.SQLException;

import net.sf.tapestry.IRequestCycle;
import net.sf.tapestry.form.IPropertySelectionModel;
import net.sf.tapestry.html.BasePage;
import net.sf.tapestry.valid.ValidationDelegate;
import petshop.PetshopSelectionModel;
import petshop.Visit;
import petshop.dataobjects.CustomerDO;
import petshop.domain.Customer;

public class EditAccount extends BasePage
{

	private String username;
	private String user_email;
	private String given_name;
	private String family_name;
	private String address_1;
	private String address_2;
	private String city;
	private String postal_code;
	private String telephone_number;
	private String language;
	
	private String favorite_category;
	private String[] favorites =
			{"BIRDS", "CATS", "DOGS", "FISH", "REPTILES"};
	private IPropertySelectionModel favoritesModel;
	
	private boolean myList_on;
	private boolean banners_on;
	
	private String state_or_province;
	private String[] states = {"California", "New York", "Texas"};
	private IPropertySelectionModel statesModel;
	
	private String country;
	private String[] countries = {"USA", "Canada", "Portugal"};
	private IPropertySelectionModel countriesModel;
	
	private String[] languages = {"English", "Português"};
	private String[] languageCodes = {"en", "pt"};
	private IPropertySelectionModel languagesModel;

	public void detach()
	{
		username = null;
		user_email = null;
		given_name = null;
		family_name = null;
		address_1 = null;
		address_2 = null;
		city = null;
		state_or_province = null;
		postal_code = null;
		telephone_number = null;
		language = null;
		favorite_category = null;
		favoritesModel = null;
		myList_on = false;
		banners_on = false;
		statesModel = null;
		countriesModel = null;
		languagesModel = null;

		super.detach();
	}

	public void getCustomerDetails()
	{
		if (this.username != null && this.username.trim().length() > 0)
		{
			Customer customer = new Customer();
			CustomerDO customerDO = new CustomerDO();

			try
			{
				customer = customerDO.getDetails(this.username);
			}
			catch (SQLException e)
			{
				System.out.println(e.getMessage());
			}
			this.user_email = customer.getEmail();
			this.given_name = customer.getFirstname();
			this.family_name = customer.getLastname();
			this.address_1 = customer.getAddr1();
			this.address_2 = customer.getAddr2();
			this.city = customer.getCity();
			this.state_or_province = customer.getState();
			this.country = customer.getCountry();
			this.postal_code = customer.getZip();
			this.telephone_number = customer.getPhone();
			this.language = customer.getLangpref();
			this.favorite_category = customer.getFavcategory();
			this.myList_on = customer.getMylistopt();
			this.banners_on = customer.getBanneropt();
			
			

		}

	}

	public void directUpdateAccount(IRequestCycle cycle)
	{
		{
			ValidationDelegate delegate =
					(ValidationDelegate) getBeans().getBean("delegate");

			if (!delegate.getHasErrors())
			{

				CustomerDO customerDO = new CustomerDO();

				Visit visit = (Visit) this.getVisit();

				try
				{
					int lopt = isMyList_on() ? 1 : 0;
					int bopt = isBanners_on() ? 1 : 0;

					customerDO.updateAccount(
							visit.getUsernamePK(),
							getUser_email(),
							getGiven_name(),
							getFamily_name(),
							getAddress_1(),
							getAddress_2(),
							getCity(),
							getState_or_province(),
							getPostal_code(),
							getCountry(),
							getTelephone_number(),
							getLanguage(),
							getFavorite_category(),
							lopt,
							bopt);
					visit.setFavCategory(getFavorite_category());
					visit.setLanguage(getLanguage());
					visit.setBanneropt(isBanners_on());
					visit.setListOptions(isMyList_on());
					cycle.setPage("UpdatAccountSuccess");
				}
				catch (SQLException e)
				{
					System.out.println(e.getMessage());
				}
			}
		}

	}

	public String getGiven_name()
	{
		return given_name;
	}

	public String getAddress_1()
	{
		return address_1;
	}

	public String getAddress_2()
	{
		return address_2;
	}

	public String getCity()
	{
		return city;
	}

	public String[] getCountries()
	{
		return countries;
	}

	public IPropertySelectionModel getCountriesModel()
	{
		if (countriesModel == null)
			countriesModel = buildCountriesModel();
		return countriesModel;
	}

	private IPropertySelectionModel buildCountriesModel()
	{
		PetshopSelectionModel model = new PetshopSelectionModel();

		for (int i = 0; i < countries.length; i++)
			model.add(countries[i], countries[i]);
		return model;
	}

	public String getFamily_name()
	{
		return family_name;
	}

	public String getFavorite_category()
	{
		return favorite_category;
	}

	public String[] getFavorites()
	{
		return favorites;
	}

	public IPropertySelectionModel getFavoritesModel()
	{
		if (favoritesModel == null)
			favoritesModel = buildFavoritesModel();
		return favoritesModel;
	}

	private IPropertySelectionModel buildFavoritesModel()
	{
		PetshopSelectionModel model = new PetshopSelectionModel();

		for (int i = 0; i < favorites.length; i++)
			model.add(favorites[i], favorites[i]);
		return model;
	}

	public String getLanguage()
	{
		return language;
	}

	public IPropertySelectionModel getLanguagesModel()
	{
		if (languagesModel == null)
			languagesModel = buildLanguagesModel();
		return languagesModel;
	}

	private IPropertySelectionModel buildLanguagesModel()
	{
		PetshopSelectionModel model = new PetshopSelectionModel();

		for (int i = 0; i < languages.length; i++)
			model.add(languageCodes[i], languages[i]);
		return model;
	}

	public String getPostal_code()
	{
		return postal_code;
	}

	public String getState_or_province()
	{
		return state_or_province;
	}

	public String[] getStates()
	{
		return states;
	}

	public IPropertySelectionModel getStatesModel()
	{
		if (statesModel == null)
			statesModel = buildStatesModel();
		return statesModel;
	}

	private IPropertySelectionModel buildStatesModel()
	{
		PetshopSelectionModel model = new PetshopSelectionModel();

		for (int i = 0; i < states.length; i++)
			model.add(states[i], states[i]);
		return model;
	}

	public String getTelephone_number()
	{
		return telephone_number;
	}

	public String getUser_email()
	{
		return user_email;
	}

	public String getUsername()
	{
		return username;
	}

	public void setUsername(String username)
	{
		this.username = username;
	}

	public String getCountry()
	{
		return country;
	}

	public void setAddress_1(String address_1)
	{
		this.address_1 = address_1;
	}

	public void setAddress_2(String address_2)
	{
		this.address_2 = address_2;
	}

	public void setCity(String city)
	{
		this.city = city;
	}

	public void setCountries(String[] countries)
	{
		this.countries = countries;
	}

	public void setCountriesModel(IPropertySelectionModel countriesModel)
	{
		this.countriesModel = countriesModel;
	}

	public void setCountry(String country)
	{
		this.country = country;
	}

	public void setFamily_name(String family_name)
	{
		this.family_name = family_name;
	}

	public void setFavorite_category(String favorite_category)
	{
		this.favorite_category = favorite_category;
	}

	public void setFavorites(String[] favorites)
	{
		this.favorites = favorites;
	}

	public void setGiven_name(String given_name)
	{
		this.given_name = given_name;
	}

	public void setLanguage(String language)
	{
		this.language = language;
	}

	public void setPostal_code(String postal_code)
	{
		this.postal_code = postal_code;
	}

	public void setState_or_province(String state_or_province)
	{
		this.state_or_province = state_or_province;
	}

	public void setTelephone_number(String telephone_number)
	{
		this.telephone_number = telephone_number;
	}

	public void setUser_email(String user_email)
	{
		this.user_email = user_email;
	}

	public void setMyList_on(boolean myList_on)
	{
		this.myList_on = myList_on;
	}

	public boolean isMyList_on()
	{
		return this.myList_on;
	}

	public boolean isBanners_on()
	{
		return banners_on;
	}

	public void setBanners_on(boolean banners_on)
	{
		this.banners_on = banners_on;
	}

}