import { getLoginParkList, getParkBuildingList } from "../../service/park"
import { getParkSimpleMeterList } from "../../service/meter"
import { alertInfo } from "../../utils/index";
import request from "../../utils/request"
import { payWays, feeType } from "../../utils/data";
import { getTenementList, getWxTenementList } from "../../service/tenement";
const { OK } = request;

// components/searchSelect/index.js
Component({

  /**
   * 组件的属性列表
   */
  properties: {
    title: String,
    type: String,
    show: Boolean,
    park: String,
    isBack: Boolean,
  },
  observers: {
    "show,type": function(newShow, newType) {
      if (newShow && newType) { 
        this.onSearch()
      }
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    columns: [],
    searchText: "",
    payWays,
    feeType,
  },
  lifetimes: {
    attached() {
     
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    onChangeSearch(e) {
      this.setData({
        searchText: e.detail,
      })
    },
    onCancel() {
      this.setData({
        columns: [],
        list: [],
        searchText: ""
      })
      this.triggerEvent("cancel")
    },
    onConfirm(event) {
      const { index } = event.detail;
      const { list = [], type } = this.data;
      console.log("index", index)
      const item = list[index];
      if (!item) {
        alertInfo("请选择一项")
        return
      }
      this.setData({
        columns: [],
        list: [],
        searchText: ""
      })
      this.triggerEvent("confirm", { data: item, type } );
    },
    onPayConfirm(event) {
      const { index } = event.detail;
      const { payWays = [], type } = this.data;
      const item = payWays[index];
      this.setData({
        columns: [],
        list: [],
        searchText: ""
      })
      this.triggerEvent("confirm", { data: item, way: index, type } );
    },
    onFeeTypeConfirm(event) {
      const { index } = event.detail;
      const { feeType = [], type } = this.data;
      const item = feeType[index];
      this.setData({
        columns: [],
        list: [],
        searchText: ""
      })
      this.triggerEvent("confirm", { data: item, way: index, type } );
    },
    onSearch() {
      const { type } = this.data;
      switch(type) {
        case "park":
          this.onSearchPark();
          return;
        case "meter":
          this.onSearchMeter();
          return
        case "tenement":
          this.onSearchTenement();
          return;
        case "building":
          this.onSearchBuilding();
          return;
      }
    },
    async onSearchPark() {
      const { searchText = "" } = this.data;
      const { code, message, data: parks = [] } = await getLoginParkList({keyword: searchText});
      if (code !== OK) {
        alertInfo(message)
        return
      }
      this.setData({
        columns: parks?.map(item => item?.name),
        list: parks,
      })
    },
    async onSearchMeter() {
      const { searchText = "", park } = this.data;
      const { code, message, data: parks = [] } = await getParkSimpleMeterList({keyword: searchText, park});
      if (code !== OK) {
        alertInfo(message)
        return
      }
      this.setData({
        columns: parks?.map(item => `${item.meterNo}-${item.address}${item.shortName ? '-' + item.shortName : ''}`) || [],
        list: parks || [],
      })
    },
    async onSearchTenement() {
      const { searchText = "", park, isBack } = this.data;
      const { code, message, data = [] } = isBack ? await getWxTenementList({keyword: searchText, park}) : await getTenementList({keyword: searchText, park});
      if (code !== OK) {
        alertInfo(message)
        return
      }
      this.setData({
        columns: data?.length ? data?.map(item => item?.name) : [],
        list: data,
      })
    },
    async onSearchBuilding() {
      const { park } = this.data;
      const { code, message, buildings: data = [] } = await getParkBuildingList(park);
      if (code !== OK) {
        alertInfo(message)
        return
      }
      this.setData({
        columns: data?.length ? data?.map(item => item?.name) : [],
        list: data,
      })
    },
  }
})

