<template>
  <view class="warning-center">
    <!-- 顶部导航栏 -->
    <custom-card>
      <block slot="backText">预警中心</block>
      <block slot="right">
        <view class="header-right">
          <view class="notification-icon">
            <u-icon name="bell" size="32rpx" color="#333" />
            <view class="badge"></view>
          </view>
          <view class="settings-icon">
            <u-icon name="settings" size="32rpx" color="#333" />
          </view>
        </view>
      </block>
    </custom-card>

    <!-- 主要内容 -->
    <view class="content">
      <!-- 宣传语区域 -->
      <view class="banner">
        <view class="banner-text">
          <text class="banner-title">天灾虫害，预警在先</text>
          <text class="banner-subtitle">全天候监测，风险早知晓</text>
        </view>
        <view class="warning-icon">
          <view class="icon-triangle">
            <image :src="exclamation" class="icon-image" />
          </view>
        </view>
      </view>

      <!-- 日期选择器 -->
      <view class="date-picker">
        <view class="date-inputs" @click="showDatePickerHandle()">
          <text class="date-label">{{ startTime }}</text>
          <text class="date-separator">-</text>
          <text class="date-label">{{ endTime }}</text>
          <u-icon name="calendar" size="28rpx" color="#999" />
        </view>
        <view class="date-icons">
          <image :src="warning" class="icon-image" />
        </view>
      </view>

      <!-- 标签导航 -->
      <view class="tab-nav">
        <view 
          v-for="(tab, index) in tabs" 
          :key="index"
          class="tab-item"
          :class="{ active: activeTab === index }"
          @click="activeTabHandler(index)"
        >
          {{ tab }}
        </view>
      </view>

      <!-- 预警列表 -->
      <scroll-view
        v-if="activeTab == 0"
        class="warning-list" 
        scroll-y 
        :scroll-top="listScrollTop" 
        scroll-with-animation
        @scrolltolower="loadMore"
        @scrolltoupper="refresh"
      >
        <view
          v-for="(warning, index) in warningList"
          :key="index"
          class="warning-item"
          @click="popupShowHandler(warning)"
        >
          <view class="warning-header">
            <view class="warning-type">
              <view class="type-icon" :class="warning.status == '0' ? 'type-blue' : 'type-gray'">
                <image :src="weather" class="icon-image" />
              </view>
              <text class="type-text">{{ warning.warning_title }}</text>
              <text class="device-type">{{ warning.device_type }}</text>
            </view>
            <view class="warning-level" :class="warning.level == '0' ? 'level-normal' :warning.level == '1'? 'level-important':'level-urgent'">
            </view>
          </view>
          <view class="warning-content">
            {{ warning.warning_content }}
          </view>
          <view class="warning-footer">
            <text class="warning-time">{{ formatTime(warning.upl_time) }}</text>
            <view class="warning-location">
              <u-icon name="location" size="20rpx" color="#999" />
            </view>
          </view>
          <view class="location-text">
            <u-icon name="map" size="28"></u-icon>
            <text style="margin-left: 10rpx">{{ warning.address || '-' }}</text>
          </view>
        </view>
        
        <!-- 加载更多提示 -->
        <view class="loading-more">
          <text v-if="loading">加载中...</text>
          <text v-else-if="finished">没有更多数据了</text>
          <text v-else>上拉加载更多</text>
        </view>
      </scroll-view>

      <scroll-view
        v-if="activeTab == 1"
        class="warning-list" 
        scroll-y 
        :scroll-top="listScrollTop" 
        scroll-with-animation
        @scrolltolower="loadMore"
        @scrolltoupper="refresh"
      >
        <view
          v-for="(warning, index) in manualWarningList"
          :key="index"
          class="warning-item"
          @click="popupManualShowHandler(warning)"
        >
          <view class="warning-content">
            {{ warning.conf }}
          </view>
          <view class="warning-footer">
            <text class="warning-time">{{ formatTime(warning.create_time) }}</text>
            <view class="warning-location">
              <u-icon name="location" size="20rpx" color="#999" />
            </view>
          </view>
        </view>
        
        <!-- 加载更多提示 -->
        <view class="loading-more">
          <text v-if="loading">加载中...</text>
          <text v-else-if="finished">没有更多数据了</text>
          <text v-else>上拉加载更多</text>
        </view>
      </scroll-view>
      <!-- 回到顶部 -->
      <view class="back-to-top" @click="scrollToTop">
        <u-icon name="arrow-up" size="28rpx" color="#999" />
      </view>
    </view>
		<u-calendar v-model="showDatePicker" :mode="mode" @change="changeCalendar"></u-calendar>
    <u-popup v-model="popupShow" mode="bottom" height="80%" border-radius="20">
      <view class="popup-container">
        <view class="popup-icon" :class="current.level == '0' ? 'popup-level-normal' :current.level == '1'? 'popup-level-important':'popup-level-urgent'">
        </view>
        <view class="popup-header">{{ current.warning_title }}</view>
        <view class="popup-type">
          <text class="type-text">{{ current.device_type }}</text>
        </view>
        <view class="popup-content">{{ current.warning_content }}</view>
        <view class="popup-time">{{ formatTime(current.upl_time) }}</view>
        <view class="popup-text">
          <u-icon name="map" size="28"></u-icon>
          <text style="margin-left: 10rpx">{{ warning.address || '-' }}</text>
        </view>
      </view>
		</u-popup>
    <u-popup v-model="popupManualShow" mode="bottom" height="80%" border-radius="20">
      <view class="popup-container" style="margin-top:40rpx">
        <view class="popup-content">{{ currentManual.conf }}</view>
        <view class="popup-time">{{ formatTime(currentManual.create_time) }}</view>
      </view>
		</u-popup>
  </view>
</template>

<script>
import exclamation from './assets/exclamation.png';
import warning from './assets/warning.png';
import pest from './assets/pest.png';
import weather from './assets/weather.png';
import offline from './assets/offline.png';

export default {
  data() {
    return {
      current:{},
      currentManual:{},
      popupShow: false,
      popupManualShow: false,
      exclamation,
      warning,
      pest,
      weather,
      offline,
      showDatePicker: false,
			mode: 'range',
      activeTab: 0,
      listScrollTop: 0,
      tabs: ['环境监测','手动预警'],
      warningList: [],
      manualWarningList: [],
      page_size: 10,
      page: 1,
      // 获取7天前的日期
      startTime: this.getSevenDaysAgo() || '开始日期',
      endTime: this.getCurrentDate() || '结束日期',
      deviceId: '',
      device_type_id:'',
      total: 0,
      loading: false,
      finished: false,
      refreshing: false,
    };
  },
  onLoad() {
    this.getWarningList();
  },
  methods: {
    activeTabHandler(index){
      this.activeTab = index;
      if(index == 0){
        this.getWarningList();
      }else if(index == 1){
        this.getWarningManualList();
      }
    },
    popupManualShowHandler(warning){
      this.currentManual = warning;
      this.popupManualShow = true;
    },
    popupShowHandler(warning){
      this.current = warning;
      const params = {
        record_ids: warning.id,
      };
      this.readHandler(params)
      this.popupShow = true;
    },
    changeCalendar(e){
      this.startTime = e.startDate;
      this.endTime = e.endDate;
      // 重置分页参数
      this.page = 1;
      this.loading = false;
      this.finished = false;
      if(this.activeTab == 0){
        this.getWarningList();
      }else if(this.activeTab == 1){
        this.getWarningManualList();
      }
    },
    // 加载更多
    loadMore() {
      if (this.finished) return;
      if(this.activeTab == 0){
        this.getWarningList();
      }else if(this.activeTab == 1){
        this.getWarningManualList();
      }
    },
    // 下拉刷新
    refresh() {
      if (this.loading) return;
      // 重置分页参数
      this.page = 1;
      this.loading = false;
      this.finished = false;
      this.refreshing = true;
      if(this.activeTab == 0){
        this.getWarningList();
      }else if(this.activeTab == 1){
        this.getWarningManualList();
      }
    },
    // 已读
    async readHandler(params){
      await this.$myRequest({
        url:'/api/api_gateway?method=device.env_sec_alert.update_env_sec_alert_record',
        method:'POST',
        data: params,
      })
      this.page = 1;
      if(this.activeTab == 0){
        this.getWarningList();
      }
    },
    formatTime(time){
      if(!time){
        return '';
      }
      const date = new Date(time * 1000);
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const day = String(date.getDate()).padStart(2, '0');
      const hour = String(date.getHours()).padStart(2, '0');
      const minute = String(date.getMinutes()).padStart(2, '0');
      const second = String(date.getSeconds()).padStart(2, '0');
      return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
    },
    // 获取7天前的日期
    getSevenDaysAgo() {
      const today = new Date();
      const sevenDaysAgo = new Date(today);
      sevenDaysAgo.setDate(today.getDate() - 7);
      const year = sevenDaysAgo.getFullYear();
      const month = String(sevenDaysAgo.getMonth() + 1).padStart(2, '0');
      const day = String(sevenDaysAgo.getDate()).padStart(2, '0');
      return `${year}-${month}-${day}`;
    },
    // 获取当前日期
    getCurrentDate() {
      const today = new Date();
      const year = today.getFullYear();
      const month = String(today.getMonth() + 1).padStart(2, '0');
      const day = String(today.getDate()).padStart(2, '0');
      return `${year}-${month}-${day}`;
    },
    showDatePickerHandle(){
      this.showDatePicker = true;
    },
  // 把日期转成秒数
    dateToTimestamp(date) {
      return Math.floor(new Date(date).getTime() / 1000);
    },
    async getWarningManualList(){
      if (this.loading) return;
      
      this.loading = true;
      
      const start = this.dateToTimestamp(this.startTime + ' 00:00:00');
      const end = this.dateToTimestamp(this.endTime + ' 23:59:59');
      const params = {
        start,
        end,
        page: this.page,
        page_size: this.page_size,
        device_id: this.deviceId,
        device_type_id: this.device_type_id
      }
      
      try {
        const res = await this.$myRequest({
          url:'/api/api_gateway?method=device.env_sec_alert.get_manual_env_sec_alert_record',
          method:'POST',
          data: params,
        })
        
        const resData = res?.data || [];
        const list = resData || [];
        
        if (this.page === 1) {
          this.manualWarningList = list;
        } else {
          this.manualWarningList = [...this.manualWarningList, ...list];
        }
        
        this.total = res?.total || 0;
        this.loading = false;
        
        // 计算是否还有更多数据
        if (this.manualWarningList.length >= this.total) {
          this.finished = true;
        } else {
          this.page++;
        }
        
        // 结束刷新状态
        if (this.refreshing) {
          this.refreshing = false;
        }
        
      } catch (error) {
        console.error('获取预警列表失败:', error);
        this.loading = false;
        if (this.refreshing) {
          this.refreshing = false;
        }
      }
    },
    async getWarningList(){
      if (this.loading) return;
      
      this.loading = true;
      
      const start = this.dateToTimestamp(this.startTime + ' 00:00:00');
      const end = this.dateToTimestamp(this.endTime + ' 23:59:59');
      const params = {
        start,
        end,
        page: this.page,
        page_size: this.page_size,
        device_id: this.deviceId,
        device_type_id: this.device_type_id
      }
      
      try {
        const res = await this.$myRequest({
          url:'/api/api_gateway?method=device.env_sec_alert.get_env_sec_alert',
          method:'POST',
          data: params,
        })
        
        const resData = res?.data || [];
        const list = resData || [];
        
        if (this.page === 1) {
          this.warningList = list;
        } else {
          this.warningList = [...this.warningList, ...list];
        }
        
        this.total = res?.total_num || 0;
        this.loading = false;
        
        // 计算是否还有更多数据
        if (this.warningList.length >= this.total) {
          this.finished = true;
        } else {
          this.page++;
        }
        
        // 结束刷新状态
        if (this.refreshing) {
          this.refreshing = false;
        }
        
      } catch (error) {
        console.error('获取预警列表失败:', error);
        this.loading = false;
        if (this.refreshing) {
          this.refreshing = false;
        }
      }
    },
    // 回到顶部
    scrollToTop() {
      this.listScrollTop = 0;
    }
  }
};
</script>

<style scoped lang="scss">
.warning-center {
  min-height: 100vh;
  font-family: 'Source Han Sans CN';
  background: linear-gradient(0deg, #F5F6FA 79.64%, #FFEEEC 99.35%);
}
::v-deep .u-calendar__action{
  display:flex;
}
::v-deep .u-calendar__action__icon{
  width: 40rpx;
}
::v-deep .u-calendar__action__text{
  width: calc(100% - 160rpx);
  text-align: center;
}
.content {
  padding: 0 32rpx;
}

/* 宣传语区域 */
.banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 32rpx 0;
  margin-bottom: 0rpx;
  padding: 24rpx;

  .banner-text {
    flex: 1;

    .banner-title {
      font-style: italic;
      display: block;
      color: #303133;
      font-family: "Source Han Sans CN VF";
      font-size: 40rpx;
      font-weight: 700;
      margin-bottom: 8rpx;
    }

    .banner-subtitle {
      display: block;
      font-size: 24rpx;
      color: #666666;
    }
  }

  .warning-icon {
    .icon-triangle {
      width: 130rpx;
      height: 130rpx;
      position: relative;
      .icon-image{
        width: 100%;
        height: 100%;
      }
    }
  }
}
.popup-container{
  position:relative;
  .popup-icon {
    position: absolute;
    top:0;
    right:0;
    margin-left: 12rpx;
    width: 112rpx;
    height: 48rpx;
    background: url('./assets/normal-gray.png');
    background-repeat: no-repeat;
    background-size: 100%;
    &.popup-level-normal {
      background: url('./assets/normal.png');
      background-repeat: no-repeat;
      background-size: 100%;
    }

    &.popup-level-important {
      background: url('./assets/important.png');
      background-repeat: no-repeat;
      background-size: 100%;
    }

    &.popup-level-urgent {
      background: url('./assets/urgent.png');
      background-repeat: no-repeat;
      background-size: 100%;
    }
  }
}
.popup-header{
  padding: 20rpx 32rpx;
  width: 100%;
  text-align: left;
  color: #303133;
  font-family: "Source Han Sans CN VF";
  font-size: 32rx;
  font-weight: 700;
}
.popup-type{
  border-radius:32rpx;
  margin-left: 32rpx;
  display:inline-block;
  border: 2rpx solid #E4E7ED;
  padding: 2rpx 12rpx;
  color: #666666;
  font-family: "Source Han Sans CN VF";
  font-size: 24rpx;
  font-weight: 400;
  margin-bottom: 24rpx;
}
.popup-content{
  padding: 0 32rpx;
  line-height: 50rpx;
}
.popup-time{
  padding:0 32rpx;
  margin-top: 36rpx;
  color:#999999;
  font-size: 24rpx;
  text-align: left;
  color: #bdbdbd;
  font-family: "Source Han Sans CN VF";
  font-style: normal;
  font-weight: 400;
}
.popup-location{
  font-size: 24rpx;
  margin-top: 16rpx;
  padding-top: 16rpx;
  font-family: "Source Han Sans CN VF";
  color: #999999;
  display:flex;
  align-items: center;
}

.popup-text {
  padding: 0 32rpx;
  font-size: 24rpx;
  margin-top: 16rpx;
  padding-top: 16rpx;
  font-family: "Source Han Sans CN VF";
  color: #999999;
  display:flex;
  align-items: center;
}
/* 日期选择器 */
.date-picker {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 32rpx;

  .date-inputs {
    display: flex;
    align-items: center;
    background: #ffffff;
    border-radius: 48rpx;
    padding: 14rpx;
    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);

    .date-label {
      width:250rpx;
      font-size: 26rpx;
      color: #999999;
      text-align: center;
    }

    .date-separator {
      margin: 0 24rpx;
      font-size: 26rpx;
      color: #999999;
    }
  }

  .date-icons {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 60rpx            ;
    height: 60rpx;
    border-radius: 50%;
    background:#ffffff;
    .icon-image{
      width: 32rpx;
      height: 32rpx;
    }
  }
}

/* 标签导航 */
.tab-nav {
  display: flex;
  margin-bottom: 24rpx;
  border-bottom: 1rpx solid #e5e5e5;

  .tab-item {
    padding: 20rpx 0;
    font-size: 28rpx;
    color: #666666;
    position: relative;
    margin-right: 30rpx;
    &.active {
      color: #333333;
      font-weight: 500;

      &::after {
        content: '';
        position: absolute;
        bottom: 0;
        left: 50%;
        transform: translateX(-50%);
        width: 100%;
        height: 4rpx;
        background: #515153;
        border-radius: 2rpx;
      }
    }
  }
}

/* 预警列表 */
.warning-list {
  margin-bottom: 100rpx;
  height: calc(100vh - 600rpx);
  overflow-y: auto;
  .warning-item {
    position: relative;
    padding: 28rpx 24rpx;
    margin-bottom: 24rpx;
    background: #ffffff;
    border-radius: 16rpx;
    box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
    .warning-header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      margin-bottom: 16rpx;

      .warning-type {
        display: flex;
        align-items: center;
        flex: 1;
        min-width: 0;

        .type-icon {
          width: 48rpx;
          height: 48rpx;
          border-radius: 50%;
          margin-right: 12rpx;
          flex-shrink: 0;
          display:flex;
          align-items: center;
          justify-content: center;

          &.type-red {
            background: linear-gradient(180deg, #FFA9A5 0%, #FF716A 100%);
          }

          &.type-blue {
            background: linear-gradient(180deg, #83D2FF 0%, #09A5FC 100%);
          }

          &.type-yellow {
            background: linear-gradient(180deg, #FED057 0%, #FFAF40 100%);
          }

          &.type-gray {
            background: #DDDFE6;
          }
          .icon-image{
            width: 28rpx;
            height: 28rpx;
          }
        }

        .type-text {
          font-size: 26rpx;
          font-weight: 500;
          color: #333333;
          margin-right: 12rpx;
          flex-shrink: 0;
        }

        .device-type {
          font-size: 22rpx;
          color: #515153;
          font-family: "Source Han Sans CN VF";
          font-style: normal;
          font-weight: 400;
          border: 2rpx solid #E4E7ED;
          padding: 2rpx 12rpx;
          border-radius: 32rpx;
          margin-left: 8rpx;
          flex-shrink: 0;
        }
      }

      .warning-level {
        position: absolute;
        top:0;
        right:0;
        margin-left: 12rpx;
        width: 112rpx;
        height: 48rpx;
        background: url('./assets/normal-gray.png');
        background-repeat: no-repeat;
        background-size: 100%;
        &.level-normal {
          background: url('./assets/normal.png');
          background-repeat: no-repeat;
          background-size: 100%;
        }

        &.level-important {
          background: url('./assets/important.png');
          background-repeat: no-repeat;
          background-size: 100%;
        }

        &.level-urgent {
          background: url('./assets/urgent.png');
          background-repeat: no-repeat;
          background-size: 100%;
        }
      }
    }

    .warning-content {
      font-size: 28rpx;
      color: #333333;
      line-height: 40rpx;
      margin-bottom: 20rpx;
      //最多显示2行
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
    }

    .warning-footer {
      display: flex;
      align-items: center;
      justify-content: space-between;

      .warning-time {
        font-size: 24rpx;
        color: #999999;
      }

      .warning-location {
        display: flex;
        align-items: center;
      }
    }
    .location-text {
      font-size: 24rpx;
      margin-top: 16rpx;
      padding-top: 16rpx;
      border-top: 1rpx solid #f0f0f0;
      font-family: "Source Han Sans CN VF";
      color: #999999;
      display:flex;
      align-items: center;
    }
  }
}

/* 加载更多提示 */
.loading-more {
  text-align: center;
  padding: 32rpx 0;
  font-size: 24rpx;
  color: #999999;
}

/* 回到顶部 */
.back-to-top {
  position: fixed;
  bottom: 80rpx;
  right: 32rpx;
  width: 64rpx;
  height: 64rpx;
  background: #ffffff;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);
  z-index: 99;
}

/* 顶部导航栏右侧图标 */
.header-right {
  display: flex;
  align-items: center;

  .notification-icon {
    position: relative;
    margin-right: 32rpx;

    .badge {
      position: absolute;
      top: -4rpx;
      right: -4rpx;
      width: 12rpx;
      height: 12rpx;
      background: #ff6b6b;
      border-radius: 50%;
    }
  }
}
</style>