using UnityEngine;
using UnityEngine.UI;
using UniRx;
using AX.ImageViewer;

public class AdjacentImagePanel : UIView 
{
    public Text TitleText;
    public Orientation orientation;
    //图片类型
    public OriginalImageType ImageType;
    //图片面板
    public Image ImagePanel;
    //全景开关
    public Toggle ImageTypeToggle;
    //查看原图
    public Button ViewButton;
    public OpenImage OpenImageFile;
    //保存按钮
    public Button SaveButton;
    public BuildingAdjacentReactive Data;
   
    public override void Awake()
    {
        base.Awake();
       
        transform.Find("TitleBar/CloseButton").GetComponent<Button>().OnClickAsObservable()
            .Subscribe(_ => Hide());
    }

    public void OnRefresh()
    {
        Data = UIManager.Instance.GetView<AdjacentInfoPanel>().Data.Find(item => item.Id.Value == orientation.ToString());
        Data.ImageType.Subscribe(data =>
        {
            switch (data)
            {
                case OriginalImageType.Normal:
                    ImageTypeToggle.isOn = false;
                    break;
                case OriginalImageType.Panorama:
                    ImageTypeToggle.isOn = true;
                    break;
            }
        }).AddTo(gameObject);
        ImageTypeToggle.OnValueChangedAsObservable().Subscribe(b =>
        {
            Data.ImageType.Value = b ? OriginalImageType.Panorama : OriginalImageType.Normal;
        }).AddTo(gameObject);

        //ImageTypeToggle.onValueChanged.RemoveAllListeners();
        //查看原图
        ViewButton.onClick.AsObservable().Subscribe(onClick =>
        {
            ViewImage();
        });
        //上传图片
        OpenImageFile.OnLoadTextureFinished = texture =>
        {
            UploadImage(texture);
        };
        //保存
        SaveButton.onClick.AsObservable().Subscribe(onClick =>
        {
            SaveData();
        }).AddTo(gameObject);

        LoadData();
    }

    public void SaveData()
    {
        string url = string.Format(HttpManager.Instance.PostBuildingAdjoinsById, Data.Id.Value);
        HttpManager.Instance.Post(url, Data.GetData());
        
    }

    public void UploadImage(Texture2D texture)
    {
        HttpManager.Instance.PostImage($"Adjoin{orientation}.jpg", texture, a =>
        {
            Data.ImageUrl.Value = a?.ObjectName;
        });
    }

    public void LoadData()
    {
        string url = string.Format(HttpManager.Instance.GetBuildingAdjoinsById, Data.Id.Value);
        HttpManager.Instance.Get<BuildingAdjacent>(url, d =>
        {
            Data.SetData(d);
            GetImage();
        });

    }
    public void GetImage()
    {
        if (!string.IsNullOrEmpty(Data.ImageUrl.Value))
        {
            //HttpManager.Instance.GetImage($"{ Data.ImageUrl.Value}?x-image-process=image/resize,m_lfit,h_200,w_300", texture =>
            HttpManager.Instance.GetImage($"{ Data.ImageUrl.Value}?x-oss-process=image/resize,h_200", texture =>
            {
                ImagePanel.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
                ImagePanel.preserveAspect = true;
            });
        }
        else
        {
            ImagePanel.sprite = AssetManager.Instance.DefaultSprite;
        }

    }

    public void ViewImage()
    {
        if (!string.IsNullOrEmpty(Data.ImageUrl.Value))
        {
            HttpManager.Instance.GetImage(Data.ImageUrl.Value, texture =>
            {
                switch (Data.ImageType.Value)
                {
                    case OriginalImageType.Normal:
                        ImageViewer.Load(texture);
                        break;
                    case OriginalImageType.Panorama:
                        PanoramicViewer.Load(texture);
                        break;
                }
            });
        }
        else
        {
            MessageBox.Show("未上传图片!", Color.white, 3f);
        }


    }
}