/*
 * Copyright (C) 2005-2006 Kouji Sugisawa. All rights reserved.
 */

package jp.sourceforge.livez;

import java.io.Serializable;
import java.util.List;

import jp.sourceforge.livez.images.ImageType;

/**
 * 携帯端末情報のインターフェースです。
 * 
 * @author 杉澤 浩二
 */
public interface MobilePhone<B extends Browser, A extends Appli, U extends UserId> extends Serializable {

	/**
	 * 携帯端末情報をビーンとして保持する場合の名前(キー)
	 */
	public static final String BEAN_KEY = "jp.sourceforge.livez.MobilePhone";

	/**
	 * 提供する通信サービスの種類を返します。
	 * 
	 * @return 提供する通信サービスの種類
	 */
	public ServiceType getServiceType();

	/**
	 * 携帯キャリアの種類を返します。
	 * 携帯キャリアとはNTTドコモやau、Tu-Ka、ボーダホンなどの通信サービス事業に加入している組織の名称です。
	 * 
	 * @return 携帯キャリアの種類
	 */
	public CarrierType getCarrierType();

	/**
	 * 携帯端末の一意な識別子を返します。
	 * 一意な識別子は多くの場合、機種名と同一になりますが一部の携帯端末では異なる可能性があります。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return 携帯端末の一意な識別子
	 */
	public String getId();

	/**
	 * 機種名を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return 機種名
	 */
	public String getName();

	/**
	 * 製品名を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return 製品名
	 */
	public String getProductName();

	/**
	 * シリーズ名を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return シリーズ名
	 */
	public String getSeriesName();

	/**
	 * ベンダーIDを返します。
	 * ベンダーIDは機種名の前後に付与されている製造メーカーを表す短い文字列です。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return ベンダーID
	 */
	public String getVendorId();

	/**
	 * 画面情報を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return 画面情報
	 */
	public Screen getScreen();

	/**
	 * Web ブラウザ情報を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return Web ブラウザ情報
	 */
	public B getBrowser();

	/**
	 * アプリ実行環境情報を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return アプリ実行環境情報
	 */
	public A getAppli();

	/**
	 * ユーザID情報を返します。
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return ユーザID情報
	 */
	public U getUserId();

	/**
	 * 画像形式への対応状況を返します。
	 * 
	 * @return 指定した画像形式への対応状況
	 */
	public List<ImageType> getEnableImageTypes();

}
