package io.mapwize.mapwizeui.modeview;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.FrameLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

import io.mapwize.mapwizesdk.api.DirectionMode;
import io.mapwize.mapwizeui.R;

public class ModeView extends FrameLayout implements ModeViewAdapter.OnModeChangeListener {

    private RecyclerView recyclerView;
    private ModeViewAdapter modeViewAdapter;
    ModeViewAdapter.OnModeChangeListener listener;

    public ModeView(@NonNull Context context) {
        super(context);
        initialize(context);
    }

    public ModeView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initialize(context);
    }

    public ModeView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initialize(context);
    }

    private void initialize(@NonNull Context context) {
        inflate(context, R.layout.mapwize_mode_view, this);
        recyclerView = findViewById(R.id.mapwize_mode_recycler_view);
        LinearLayoutManager lm = new LinearLayoutManager(context, RecyclerView.HORIZONTAL, false);

        recyclerView.setLayoutManager(lm);
        modeViewAdapter = new ModeViewAdapter();
        modeViewAdapter.setListener(this);
        recyclerView.setAdapter(modeViewAdapter);
    }

    public void centerOnActiveMode() {
        recyclerView.scrollToPosition(modeViewAdapter.getSelectedItemIndex());
    }

    public void setListener(ModeViewAdapter.OnModeChangeListener listener) {
        this.listener = listener;
    }

    public void setMode(DirectionMode mode) {
        modeViewAdapter.setSelectedMode(mode, false);
    }

    public void setModes(List<DirectionMode> modes) {
        modeViewAdapter.swapData(modes);
    }

    @Override
    public void onModeChange(DirectionMode mode) {
        listener.onModeChange(mode);
    }
}