/*
 * Copyright (C) 2017 Anton Kaliturin <[email protected]>
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.kaliturin.blacklist.fragments;


import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.kaliturin.blacklist.R;
import com.kaliturin.blacklist.adapters.InformationArrayAdapter;

/**
 * Information fragment
 */
public class InformationFragment extends Fragment implements FragmentArguments {
    private static final String TAG = InformationFragment.class.getName();
    private ListView listView = null;
    private int listPosition = 0;

    public InformationFragment() {
        // Required empty public constructor
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // set activity title
        Bundle arguments = getArguments();
        ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        if (arguments != null && actionBar != null) {
            actionBar.setTitle(arguments.getString(TITLE));
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            listPosition = savedInstanceState.getInt(LIST_POSITION, 0);
        }

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_information, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        listView = (ListView) view.findViewById(R.id.help_list);

        InformationArrayAdapter adapter = new InformationArrayAdapter(getContext());

        adapter.addTitle(R.string.About);
        String title = getString(R.string.app_name) + " (" + getAppVersion() + ")";
        adapter.addText(title, getString(R.string.Info_about));

        adapter.addTitle(R.string.Attention);
        adapter.addText(R.string.Info_attention);

        adapter.addTitle(R.string.Messaging);
        adapter.addText(R.string.Info_messaging);

        adapter.addTitle(R.string.Black_list);
        adapter.addText(R.string.Info_black_list);

        adapter.addTitle(R.string.White_list);
        adapter.addText(R.string.Info_white_list);

        adapter.addTitle(R.string.Journal);
        adapter.addText(R.string.Info_journal);

        adapter.addTitle(R.string.Settings);
        adapter.addText(R.string.Info_settings);

        adapter.addTitle(R.string.Licence);
        adapter.addText(R.string.Info_licence);

        adapter.addTitle(R.string.Author);
        adapter.addText(R.string.Info_author);

        // add adapter to the ListView and scroll list to position
        listView.setAdapter(adapter);
        listView.post(new Runnable() {
            @Override
            public void run() {
                listView.setSelection(listPosition);
            }
        });
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(LIST_POSITION, listView.getFirstVisiblePosition());
    }

    @Override
    public void onPause() {
        super.onPause();
        listPosition = listView.getFirstVisiblePosition();
    }

    @Nullable
    String getAppVersion() {
        Context context = getContext().getApplicationContext();
        if (context != null) {
            String packageName = context.getPackageName();
            try {
                PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
                return info.versionName;
            } catch (PackageManager.NameNotFoundException ex) {
                Log.w(TAG, ex);
            }
        }
        return null;
    }
}