/* ownCloud Android client application
 *   Copyright (C) 2011 Bartek Przybylski
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License version 2,
 *   as published by the Free Software Foundation.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package com.owncloud.android.ui.activity;

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.ui.adapter.LandingScreenAdapter;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.Toast;


/**
 * This activity is used as a landing page when the user first opens this app.
 * 
 * @author Lennart Rosam
 * 
 */
public class LandingActivity extends SherlockFragmentActivity implements
        OnClickListener, OnItemClickListener {

    public static final int DIALOG_SETUP_ACCOUNT = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Fill the grid view of the landing screen with icons
        GridView landingScreenItems = (GridView) findViewById(R.id.homeScreenGrid);
        landingScreenItems.setAdapter(new LandingScreenAdapter(this));
        landingScreenItems.setOnItemClickListener(this);

        // Check, if there are ownCloud accounts
        if (!accountsAreSetup()) {
            showDialog(DIALOG_SETUP_ACCOUNT);
        } else {
            // Start device tracking service
            Intent locationServiceIntent = new Intent();
            locationServiceIntent
                    .setAction("com.owncloud.android.location.LocationLauncher");
            sendBroadcast(locationServiceIntent);
        }

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        // Check, if there are ownCloud accounts
        if (!accountsAreSetup()) {
            showDialog(DIALOG_SETUP_ACCOUNT);
        }
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        // Check, if there are ownCloud accounts
        if (!accountsAreSetup()) {
            showDialog(DIALOG_SETUP_ACCOUNT);
        }
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        Dialog dialog;
        switch (id) {
        case DIALOG_SETUP_ACCOUNT:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(R.string.main_tit_accsetup);
            builder.setMessage(R.string.main_wrn_accsetup);
            builder.setCancelable(false);
            builder.setPositiveButton(R.string.common_ok, this);
            builder.setNegativeButton(R.string.common_cancel, this);
            dialog = builder.create();
            break;
        default:
            dialog = null;
        }

        return dialog;
    }

    public void onClick(DialogInterface dialog, int which) {
        // In any case - we won't need it anymore
        dialog.dismiss();
        switch (which) {
        case DialogInterface.BUTTON_POSITIVE:
            Intent intent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT);
            intent.putExtra("authorities",
                    new String[] { MainApp.getAuthTokenType() });
            startActivity(intent);
            break;
        case DialogInterface.BUTTON_NEGATIVE:
            finish();
        }

    }

    @Override
    /**
     * Start an activity based on the selection
     * the user made
     */
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        Intent intent;
        intent = (Intent) parent.getAdapter().getItem(position);
        if (intent != null) {
            startActivity(intent);
        } else {
            // TODO: Implement all of this and make this text go away ;-)
            Toast toast = Toast.makeText(this, "Not yet implemented!",
                    Toast.LENGTH_SHORT);
            toast.show();
        }
    }

    /**
     * Checks, whether or not there are any ownCloud accounts setup.
     * 
     * @return true, if there is at least one account.
     */
    private boolean accountsAreSetup() {
        AccountManager accMan = AccountManager.get(this);
        Account[] accounts = accMan
                .getAccountsByType(MainApp.getAccountType());
        return accounts.length > 0;
    }

}
