/*
 * Copyright (c) 2005 Kouji Sugisawa. All rights reserved.
 */

package jp.sourceforge.livez.imode;

import java.util.List;

import jp.sourceforge.livez.CarrierType;
import jp.sourceforge.livez.MobilePhone;
import jp.sourceforge.livez.Screen;
import jp.sourceforge.livez.ServiceType;

/**
 * iモード端末情報のインターフェースです。
 * 
 * @author 杉澤 浩二
 */
public interface Imode extends MobilePhone<ImodeBrowser, Iappli, UID> {

	// ---------------------------------------- 静的属性

	/**
	 * 端末の提供する通信サービスの種類を返します。<p>
	 * 常に "iモード" を返します。
	 * 
	 * @return "iモード" を表す通信サービスの種類
	 */
	public ServiceType getServiceType();

	/**
	 * キャリアの種類を返します。<p>
	 * 常に "NTTドコモ" を返します。
	 * 
	 * @return "NTTドコモ" を表すキャリアの種類
	 */
	public CarrierType getCarrierType();

	/**
	 * HTTPユーザエージェント中の機種名を返します。<p>
	 */
	public String getId();

	/**
	 * 機種名を返します。<p>
	 * 
	 * @return 機種名
	 */
	public String getName();

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

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

	/**
	 * ベンダーIDを返します。<p>
	 * ベンダーIDは端末名の前に付与されている製造メーカーを表す短い文字列です。<br>
	 * iモード対応カーナビや PlayStation の場合は <code>null</code> を返します。
	 * 
	 * @return ベンダーID
	 */
	public String getVendorId();

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

	/**
	 * 背面画面情報を返します。<p>
	 * 不明な場合は <code>null</code> を返します。
	 * ※白黒対応状況と色数/階調数についてはサポートされていません。
	 * 
	 * @return 画面情報
	 */
	public SubScreen getSubScreen();

	/**
	 * iモードブラウザ情報を返します。<p>
	 * 
	 * @return iモードブラウザ情報
	 */
	public ImodeBrowser getBrowser();

	/**
	 * iアプリ実行環境情報を返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return iアプリ実行環境情報
	 */
	public Iappli getAppli();

	/**
	 * Flash Lite 対応情報を返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return Flash Lite 対応情報
	 */
	public Flash getFlash();

	/**
	 * iモーション対応情報を返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return iモーション対応情報
	 */
	public ImotionType getImotionType();

	/**
	 * PDF対応状況を返します。<p>
	 * 非対応の場合や不明な場合は <code>false</code> を返します。
	 * 
	 * @return PDF対応状況
	 */
	public boolean isPdf();

	/**
	 * キャラ電対応状況を返します。<p>
	 * 非対応の場合や不明な場合は <code>false</code> を返します。
	 * 
	 * @return キャラ電対応状況
	 */
	public boolean isCharaDen();

	/**
	 * デコメール対応情報を返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return デコメール対応情報
	 */
	public Decomail getDecomail();

	/**
	 * トルカ対応状況を返します。<p>
	 * 非対応の場合や不明な場合は <code>false</code> を返します。
	 * 
	 * @return トルカ対応状況
	 */
	public boolean isToruca();

	/**
	 * iチャネル対応状況を返します。<p>
	 * 非対応の場合や不明な場合は <code>false</code> を返します。
	 * 
	 * @return iチャネル対応状況
	 */
	public boolean isIchannel();

	/**
	 * 写真フレーム画像対応情報のリストを返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return 写真フレーム画像対応情報のリスト
	 */
	public List<Frame> getFrames();

	/**
	 * メニューアイコン対応状況を返します。<p>
	 * 非対応の場合や不明な場合は <code>false</code> を返します。
	 * 
	 * @return メニューアイコン対応状況
	 */
	public boolean isMenuIcon();

	/**
	 * バーコード対応バージョンを返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return バーコード対応バージョン
	 */
	public Float getBarcode();

	/**
	 * SSL 対応レベルを返します。<p>
	 * 非対応の場合や不明な場合は <code>null</code> を返します。
	 * 
	 * @return SSL対応レベル
	 */
	public Integer getSsl();



	// ---------------------------------------- 動的属性

	/**
	 * アクセス中の端末タイプを返します。<p>
	 * mova 端末では状態が変化する可能性がある事に注意して下さい。
	 * 
	 * @return 端末タイプ
	 */
	public ImodeType getType();

	/**
	 * 通信状態コードを返します。<p>
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return 通信状態コード
	 */
	public AccessType getAccessType();

	/**
	 * 通信の種類を返します。<p>
	 * ※現状では N900iL 以外の端末では必ず "iモード通信" を返します。
	 * 
	 * @return 通信の種類
	 */
	public NetworkType getNetworkType();

	/**
	 * ユーザがアクセスしている国番号を返します。<p>
	 * 日本国内からのアクセスの場合は -1 を返します。
	 * 
	 * @return 国番号
	 * @see <a href="http://www.itu.int/itudoc/itu-t/ob-lists/icc/e212_685.html">List of Mobile Country or Geographical Area Codes</a>
	 */
	public int getGeoCode();

	/**
	 * 製造番号を返します。<p>
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return 製造番号
	 */
	public String getSer();

	/**
	 * FOMAカード識別番号を返します。<p>
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return FOMAカード識別番号
	 */
	public String getIcc();

	/**
	 * 公式サイトの場合は、UID 情報を返します。<p>
	 * 非公式サイト(勝手サイト)の場合は常に <code>null</code> を返します。
	 * 
	 * @return UID 情報
	 */
	public UID getUserId();

	/**
	 * トラステッドAPID を返します。<p>
	 * 不明な場合は <code>null</code> を返します。
	 * 
	 * @return トラステッドAPID
	 */
	public String getTrustedId();

}
