using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NormalList : BaseList
{
    public float rowSpacing;
    public float columnSpacing;
    public GameObject bLeft;
    public GameObject bRight;
    public TextMesh tPage;

    private int nPage=0;
    public void clickLeft()
    {
        nPage--;
        if (nPage < 0)
        {
            nPage = 0;
        }
        else
        {
            setPage(nPage);
        }
    }

    public void clickRight()
    {

        nPage++;
        if (nPage > getMaxPage())
        {
            nPage = getMaxPage();
        }
        else
        {
            setPage(nPage);
        }
    }

    public void setPage(int index)
    {
        nPage = index;
        int vIndex=0;
        for (int i=0;i<Views.Count ;i++)
        {
            if(configs.Count>(i+index*(Views.Count)))
            {
                Views[i].init((i + index * (Views.Count)),configs[(i + index * (Views.Count ))], vIndex);
                Views[i].baselist = this;
                Views[i].gameObject.SetActive(true);
                vIndex++;
            }
            else
            {
                Views[i].gameObject.SetActive(false);
            }
        }
        if(tPage!=null)
        {
            tPage.text = (nPage+1) + "/" + (getMaxPage()+1);
        }
    }

    public override void initList(List<BaseConfig> c)
    {
        base.initList(c);
        for (int i = 0; i < Views.Count; i++)
        {
            Views[i].transform.localPosition = new Vector3(((i) % Row) * rowSpacing, -((i) / Row) * columnSpacing, 0);
        }
        setPage(0);
        if (bLeft != null)
        {
            bLeft.AddComponent<Button>().onClick.AddListener(clickLeft);
        }
        if (bRight != null)
        {
            bRight.AddComponent<Button>().onClick.AddListener(clickRight);
        }
    }

    public int getMaxPage()
    {
        return ((configs.Count - 1) / (Views.Count));
    }

    public override void updateConfig(List<BaseConfig> c)
    {
        if (this.configs.Count < c.Count)
        {
            configs = new List<BaseConfig>();
            c.ForEach(i => configs.Add(i));
            setPage(getMaxPage());
        }
        else if(nPage>= getMaxPage())
        {
            configs = new List<BaseConfig>();
            c.ForEach(i => configs.Add(i));
            setPage(getMaxPage());

        }
        else
        {
            configs = new List<BaseConfig>();
            c.ForEach(i => configs.Add(i));

        }
     }
}