package io.emqtt.emqandroidtoolkit.ui.activity;

import org.eclipse.paho.client.mqttv3.MqttTopic;

import android.content.Intent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Switch;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.OnClick;
import io.emqtt.emqandroidtoolkit.Constant;
import io.emqtt.emqandroidtoolkit.R;
import io.emqtt.emqandroidtoolkit.model.Publication;
import io.emqtt.emqandroidtoolkit.model.Subscription;
import io.emqtt.emqandroidtoolkit.ui.base.ToolBarActivity;
import io.emqtt.emqandroidtoolkit.ui.widget.QoSChooseLayout;
import io.emqtt.emqandroidtoolkit.util.RealmHelper;
import io.emqtt.emqandroidtoolkit.util.TipUtil;
import io.realm.RealmResults;

public class PublicationActivity extends ToolBarActivity {

    @BindView(R.id.topic) EditText mTopic;
    @BindView(R.id.payload) EditText mPayload;
    @BindView(R.id.qos) QoSChooseLayout mQoSChooseLayout;
    @BindView(R.id.retained) Switch mRetainedSwitch;
    @BindView(R.id.btn_publish) Button mPublishBtn;
    @BindView(R.id.linear_layout) LinearLayout mLinearLayout;
    @BindView(R.id.spinner) Spinner mSpinner;

    @Override
    protected int getLayoutResId() {
        return R.layout.activity_pubilcation;
    }

    @Override
    protected void setUpView() {

        RealmResults<Subscription> results = RealmHelper.getInstance().queryAll(Subscription.class);
        final List<String> list = new ArrayList<>();
        for (Subscription result : results) {
            list.add(result.getTopic());
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, list);
        mSpinner.setAdapter(adapter);
        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String topic = list.get(position);
                mTopic.setText(topic);
                mTopic.setSelection(topic.length());
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

    }

    @Override
    protected void setUpData() {

    }


    @OnClick(R.id.btn_publish)
    public void onViewClicked() {
        String topic = mTopic.getText().toString().trim();

        try{
            MqttTopic.validate(topic, false/*wildcards NOT allowed*/);
        }catch (IllegalArgumentException e){
            TipUtil.showSnackbar(mLinearLayout, e.getMessage());
            return;
        }
        int qos = mQoSChooseLayout.getQoS();
        String payload = mPayload.getText().toString().trim();
        boolean isRetained = mRetainedSwitch.isChecked();

        Publication publication = new Publication(topic, payload, qos, isRetained);

        Intent intent = new Intent();
        intent.putExtra(Constant.ExtraConstant.EXTRA_PUBLICATION, publication);
        setResult(RESULT_OK, intent);
        finish();
    }
}