<template>
  <u-popup
    :show="show"
    mode="bottom"
    :round="10"
    :closeable="true"
    @close="handleClose"
  >
    <view class="c-dialog">
      <view class="box"><text>常用时间选择</text></view>
      <view class="box-btn">
        <text
          v-for="(item, index) in state.statusList"
          :key="index"
          :class="{ active: state.currentStates === item.id }"
          @click="handleSelect(item)"
          >{{ item.name }}</text
        ></view
      >
      <view class="box box-border"
        ><text>其它时间选择</text
        ><text class="btn" @click="handleCustom()">自定义</text></view
      >

      <view v-if="showCalendar">
        <view class="line"></view>
        <view class="box">
          <text @click="showCalendar = false">取消</text>
          <text class="btn" @click="confirm()">完成</text>
        </view>
        <view>{{ state.startTime }} - {{ state.endTime }}</view>
        <uni-calendar
          :insert="true"
          :lunar="true"
          :start-date="'2014-1-1'"
          :end-date="'2034-1-1'"
          :range="true"
          @change="handleChangeDate"
          color="#00D2E3"
        />
      </view>
    </view>
  </u-popup>
</template>
<script setup lang="ts">
import { formatDate, getCurrentMonthStartAndEnd, getCurrentYearStartAndEnd } from "@/utils";

const props = defineProps<{
  show: boolean;
}>();
const state = reactive<any>({
  startTime: "",
  endTime: "",
  currentStates: -1,
  statusList: [
    {
      id: 1,
      name: "今日",
    },
    {
      id: 2,
      name: "昨日",
    },
    {
      id: 3,
      name: "本月",
    },
    {
      id: 4,
      name: "本年",
    },
  ],
});
const emit = defineEmits(["handleDialog", "changeTime"]);
const handleClose = () => {
  emit("handleDialog", false);
};
const handleCustom = () => {
  showCalendar.value = true
  state.currentStates = -1
}

const handleSelect = (item: any) => {
  const today = new Date();
  const yesterday =  new Date((today as any) - (24 * 60 * 60 * 1000));
  state.currentStates = item.id;
  console.log(item);
  if (item.id === 1) {
    state.startTime = formatDate(today, "{y}-{m}-{d}");
    state.endTime = formatDate(today, "{y}-{m}-{d}");
  } else if (item.id === 2) {
    state.startTime = formatDate(yesterday, "{y}-{m}-{d}");
    state.endTime = formatDate(yesterday, "{y}-{m}-{d}");
  } else if (item.id === 3) {
    state.startTime = formatDate(getCurrentMonthStartAndEnd().start, "{y}-{m}-{d}");
    state.endTime = formatDate(getCurrentMonthStartAndEnd().end, "{y}-{m}-{d}");
  } else if (item.id === 4) {
    state.startTime = formatDate(getCurrentYearStartAndEnd().start, "{y}-{m}-{d}");
    state.endTime = formatDate(getCurrentYearStartAndEnd().end, "{y}-{m}-{d}");
  }
  emit("changeTime", {startTime: state.startTime, endTime: state.endTime});
  emit("handleDialog", false);
};

const showCalendar = ref(false);
const handleChangeDate = (v: any) => {
  const time1 = v.range.before;
  const time2 = v.range.after;
  if (time1 && time2) {
    const date1 = new Date(time1);
    const date2 = new Date(time2);
    if (date1 < date2) {
      state.startTime = formatDate(time1, "{y}-{m}-{d}");
      state.endTime = formatDate(time2, "{y}-{m}-{d}");
    } else if (date1 > date2) {
      state.startTime = formatDate(time2, "{y}-{m}-{d}");
      state.endTime = formatDate(time1, "{y}-{m}-{d}");
    } else {
      state.startTime = formatDate(time1, "{y}-{m}-{d}");
      state.endTime = formatDate(time2, "{y}-{m}-{d}");
    }
  }
};

const confirm = () => {
  showCalendar.value = false
  emit("changeTime", {startTime: state.startTime, endTime: state.endTime});
  emit("handleDialog", false);
}
</script>
<style lang="scss" scoped>
::v-deep .u-popup__content {
  box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
  border-radius: 32rpx 32rpx 0rpx 0rpx;
}
.c-dialog {
  margin: 65.38rpx 44.87rpx;
  font-family: Source Han Sans CN;
  font-weight: 500;
  font-size: 26rpx;
  color: #000000;
  .box-btn,
  .box {
    line-height: 80rpx;
    display: flex;
    justify-content: space-between;
  }
  .box-btn {
    line-height: 40rpx;
    margin-bottom: 30rpx;
    text {
      font-weight: 400;
      font-size: 26rpx;
      color: #999999;
      width: 140rpx;
      background: #ffffff;
      border-radius: 6rpx;
      border: 1px solid rgba(153, 153, 153, 0.64);
      text-align: center;
      cursor: pointer;
    }
    .active {
      border-color: $u-primary;
      color: $u-primary;
    }
  }
  .btn {
    font-weight: 500;
    font-size: 26rpx;
    color: $u-primary;
  }
  .box-border {
    border-top: 1px solid rgba(233, 233, 233, 0.76);
  }
  .line {
    height: 18rpx;
    background: #f8f8f8;
  }
}
</style>
