<template>
  <view class="container">
    <!-- 自定义导航栏 -->
    <view class="nav-bar">
      <view class="nav-left" @click="goBack">
        <text class="back-icon">‹</text>
      </view>
      <view class="nav-title">评分详情</view>
      <view class="nav-right">
        <view class="icon-menu">···</view>
        <view class="icon-close">⊗</view>
      </view>
    </view>

    <!-- 选手信息 -->
    <view class="player-info-section">
      <view class="player-name">{{ player.name }}</view>
      <view class="player-details">
        <view class="detail-item">身份证：{{ player.idCard }}</view>
        <view class="detail-item">队伍：{{ player.team }}</view>
        <view class="detail-item">编号：{{ player.number }}</view>
      </view>
    </view>

    <!-- 评分提示 -->
    <view class="score-tip">
      点击分数填写或拖动滑块打分（5-10分）
    </view>

    <!-- 分数调整 -->
    <view class="score-control">
      <view class="control-btn decrease" @click="decreaseScore">
        <text class="btn-symbol">－</text>
        <!-- <text class="btn-value">-0.001</text> -->
      </view>

      <view class="score-display">
        <text class="current-score">{{ currentScore.toFixed(3) }}</text>
      </view>

      <view class="control-btn increase" @click="increaseScore">
        <text class="btn-symbol">＋</text>
        <!-- <text class="btn-value">+0.001</text> -->
      </view>
    </view>

    <!-- <view class="judge-tip">
      裁判评分：保留3位小数点，超过上限或下限时，按钮置灰
    </view> -->

    <!-- 扣分项 -->
    <view class="deduction-section">
      <view class="deduction-header">
        <text class="deduction-label">扣分项：</text>
        <!-- <text class="deduction-hint">扣分项多选</text> -->
      </view>

      <view class="deduction-list">
        <view
          v-for="(item, index) in deductions"
          :key="item.deductionId"
          class="deduction-item"
          @click="toggleDeduction(index)"
        >
          <view :class="['checkbox', item.checked ? 'checked' : '']">
            <text v-if="item.checked" class="check-icon">✓</text>
          </view>
          <text class="deduction-text">{{ item.deductionName }}</text>
        </view>
      </view>
    </view>

    <!-- 备注 -->
    <view class="note-section">
      <view class="note-label">
        <text>备注：</text>
      </view>
      <view class="note-input-wrapper">
        <textarea
          class="note-input"
          placeholder="请输入修改备注"
          v-model="note"
          maxlength="200"
        />
        <!-- <text class="optional-text">可不填</text> -->
      </view>
    </view>

    <!-- 提交按钮 -->
    <button class="submit-btn" @click="handleSubmit">提交</button>
  </view>
</template>

<script>
import dataAdapter from '@/utils/dataAdapter.js'
import config from '@/config/env.config.js'

export default {
  data() {
    return {
      player: {
        athleteId: '',
        name: '',
        idCard: '',
        team: '',
        number: ''
      },
      judgeId: '',
      projectId: '',
      competitionId: '',
      venueId: '',
      currentScore: 8.000,
      note: '',
      minScore: 5.0,
      maxScore: 10.0,
      deductions: []
    }
  },

  async onLoad() {
    // 获取全局数据
    const app = getApp()
    const globalData = app.globalData || {}

    // 加载当前选手信息（从 score-list 页面传递）
    const currentAthlete = globalData.currentAthlete || {}
    this.player = {
      athleteId: currentAthlete.athleteId || '',
      name: currentAthlete.name || '选手姓名',
      idCard: currentAthlete.idCard || '',
      team: currentAthlete.team || '',
      number: currentAthlete.number || ''
    }

    // 如果选手已评分，加载其原有评分
    if (currentAthlete.scored && currentAthlete.myScore) {
      this.currentScore = currentAthlete.myScore
    }

    // 加载评委ID和项目ID
    this.judgeId = globalData.judgeId
    this.projectId = globalData.currentProjectId || ''
    this.competitionId = globalData.matchId || globalData.matchCode || ''
    this.venueId = globalData.currentVenueId || globalData.venueId || ''

    // 调试信息
    if (config.debug) {
      console.log('评分详情页加载:', {
        athlete: this.player,
        judgeId: this.judgeId,
        projectId: this.projectId,
        competitionId: this.competitionId,
        venueId: this.venueId,
        initialScore: this.currentScore
      })
    }

    // 加载扣分项列表
    await this.loadDeductions()
  },

  methods: {
    async loadDeductions() {
      try {
        // 🔥 关键改动：使用 dataAdapter 获取扣分项列表
        // Mock模式：调用 mock/score.js 的 getDeductions 函数
        // API模式：调用 api/score.js 的 getDeductions 函数（GET /martial/deductionItem/list）
        const response = await dataAdapter.getData('getDeductions', {
          projectId: this.projectId
        })

        // 为每个扣分项添加 checked 状态，并映射字段名
        const records = response.data?.records || []
        this.deductions = records.map(item => ({
          deductionId: item.id,
          deductionName: item.itemName,
          deductionScore: parseFloat(item.deductionPoint || 0),
          checked: false
        }))

        // 调试信息
        if (config.debug) {
          console.log('扣分项加载成功:', this.deductions)
        }

      } catch (error) {
        console.error('加载扣分项失败:', error)
        uni.showToast({
          title: '加载扣分项失败',
          icon: 'none'
        })
      }
    },

    goBack() {
      if (config.debug) {
        console.log('返回上一页')
      }

      uni.navigateBack({
        delta: 1,
        fail: (err) => {
          console.error('返回失败:', err)
          // 如果返回失败，尝试跳转到评分列表页
          uni.redirectTo({
            url: '/pages/score-list/score-list'
          })
        }
      })
    },

    decreaseScore() {
      if (this.currentScore > this.minScore) {
        this.currentScore = parseFloat((this.currentScore - 0.001).toFixed(3))
      }
    },

    increaseScore() {
      if (this.currentScore < this.maxScore) {
        this.currentScore = parseFloat((this.currentScore + 0.001).toFixed(3))
      }
    },

    toggleDeduction(index) {
      this.deductions[index].checked = !this.deductions[index].checked
    },

    async handleSubmit() {
      // 验证评分范围
      if (this.currentScore < this.minScore || this.currentScore > this.maxScore) {
        uni.showToast({
          title: `评分必须在${this.minScore}-${this.maxScore}分之间`,
          icon: 'none'
        })
        return
      }

      // 验证必需字段
      if (!this.competitionId) {
        uni.showToast({
          title: '缺少比赛ID，请重新登录',
          icon: 'none'
        })
        return
      }

      if (!this.projectId) {
        uni.showToast({
          title: '缺少项目ID，请返回重新选择',
          icon: 'none'
        })
        return
      }

      // 收集选中的扣分项ID
      const selectedDeductions = this.deductions
        .filter(item => item.checked)
        .map(item => item.deductionId)

      try {
        uni.showLoading({
          title: '提交中...',
          mask: true
        })

        // 准备提交数据
        const submitData = {
          athleteId: this.player.athleteId,
          judgeId: this.judgeId,
          projectId: this.projectId,
          competitionId: this.competitionId,
          venueId: this.venueId,
          score: this.currentScore,
          deductions: selectedDeductions,
          note: this.note
        }

        // 调试日志：打印提交数据
        if (config.debug) {
          console.log('准备提交评分数据:', submitData)
        }

        // 🔥 关键改动：使用 dataAdapter 提交评分
        // Mock模式：调用 mock/score.js 的 submitScore 函数
        // API模式：调用 api/score.js 的 submitScore 函数（POST /martial/score/submit）
        const response = await dataAdapter.getData('submitScore', submitData)

        uni.hideLoading()

        // 调试信息
        if (config.debug) {
          console.log('评分提交成功:', {
            athleteId: this.player.athleteId,
            score: this.currentScore,
            deductions: selectedDeductions,
            response: response
          })
        }

        // 显示成功提示
        uni.showToast({
          title: '提交成功',
          icon: 'success',
          duration: 1500
        })

        // 返回上一页
        setTimeout(() => {
          uni.navigateBack()
        }, 1500)

      } catch (error) {
        uni.hideLoading()
        console.error('提交评分失败:', error)

        uni.showToast({
          title: error.message || '提交失败，请重试',
          icon: 'none',
          duration: 2000
        })
      }
    }
  }
}
</script>

<style scoped>
.container {
  min-height: 100vh;
  background-color: #F5F5F5;
  padding-bottom: 40rpx;
}

/* 导航栏 */
.nav-bar {
  height: 90rpx;
  background: linear-gradient(135deg, #1B7C5E 0%, #2A9D7E 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  padding: 0 30rpx;
}

.nav-left {
  position: absolute;
  left: 0;
  top: 0;
  width: 120rpx;
  height: 90rpx;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10;
  cursor: pointer;
}

.nav-left:active {
  opacity: 0.6;
}

.back-icon {
  font-size: 60rpx;
  color: #FFFFFF;
  font-weight: 300;
  line-height: 1;
}

.nav-title {
  font-size: 36rpx;
  font-weight: 600;
  color: #FFFFFF;
  letter-spacing: 2rpx;
}

.nav-right {
  position: absolute;
  right: 30rpx;
  display: flex;
  align-items: center;
  gap: 30rpx;
}

.icon-menu,
.icon-close {
  width: 60rpx;
  height: 60rpx;
  background-color: rgba(255, 255, 255, 0.25);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32rpx;
  color: #FFFFFF;
  font-weight: bold;
}

/* 选手信息 */
.player-info-section {
  margin: 30rpx;
}

.player-name {
  font-size: 34rpx;
  font-weight: 600;
  color: #333333;
  margin-bottom: 20rpx;
}

.player-details {
  display: flex;
  flex-direction: column;
  gap: 8rpx;
}

.detail-item {
  font-size: 26rpx;
  color: #CD8B6F;
  line-height: 1.5;
}

/* 评分提示 */
.score-tip {
  padding: 0 30rpx;
  font-size: 26rpx;
  color: #666666;
  margin-bottom: 30rpx;
}

/* 分数控制 */
.score-control {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 60rpx;
  margin-bottom: 20rpx;
}

.control-btn {
  width: 140rpx;
  height: 140rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background-color: #F5F5F5;
  border-radius: 12rpx;
}

.control-btn.decrease {
  background-color: #FFE5E5;
}

.control-btn.increase {
  background-color: #E5F5F0;
}

.btn-symbol {
  font-size: 48rpx;
  font-weight: 300;
}

.control-btn.decrease .btn-symbol {
  color: #FF4D6A;
}

.control-btn.increase .btn-symbol {
  color: #1B7C5E;
}

.btn-value {
  font-size: 24rpx;
  margin-top: 8rpx;
}

.control-btn.decrease .btn-value {
  color: #FF4D6A;
}

.control-btn.increase .btn-value {
  color: #1B7C5E;
}

.score-display {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.current-score {
  font-size: 80rpx;
  font-weight: 600;
  color: #1B7C5E;
}

.judge-tip {
  padding: 0 30rpx;
  font-size: 24rpx;
  color: #FF4D6A;
  text-align: center;
  line-height: 1.6;
  margin-bottom: 30rpx;
}

/* 扣分项 */
.deduction-section {
  margin: 30rpx;
}

.deduction-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 20rpx;
}

.deduction-label {
  font-size: 28rpx;
  color: #333333;
  font-weight: 500;
}

.deduction-hint {
  font-size: 24rpx;
  color: #FF4D6A;
}

.deduction-list {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20rpx;
}

.deduction-item {
  display: flex;
  align-items: center;
  padding: 20rpx;
  background-color: #FFFFFF;
  border-radius: 12rpx;
  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
}

.checkbox {
  width: 40rpx;
  height: 40rpx;
  border: 2rpx solid #CCCCCC;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-right: 16rpx;
  flex-shrink: 0;
  background-color: #F5F5F5;
}

.checkbox.checked {
  background-color: #1B7C5E;
  border-color: #1B7C5E;
}

.check-icon {
  color: #FFFFFF;
  font-size: 28rpx;
  font-weight: bold;
}

.deduction-text {
  font-size: 26rpx;
  color: #333333;
  line-height: 1.4;
  flex: 1;
}

/* 备注 */
.note-section {
  margin: 30rpx;
}

.note-label {
  font-size: 28rpx;
  color: #333333;
  margin-bottom: 20rpx;
}

.note-input-wrapper {
  background-color: #FFFFFF;
  border-radius: 16rpx;
  padding: 30rpx;
  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
  position: relative;
}

.note-input {
  width: 100%;
  min-height: 120rpx;
  font-size: 28rpx;
  color: #333333;
  line-height: 1.6;
}

.note-input::placeholder {
  color: #CCCCCC;
}

.optional-text {
  position: absolute;
  right: 30rpx;
  bottom: 30rpx;
  font-size: 24rpx;
  color: #FF4D6A;
}

/* 提交按钮 */
.submit-btn {
  margin: 30rpx;
  height: 90rpx;
  background: linear-gradient(135deg, #1B7C5E 0%, #2A9D7E 100%);
  border-radius: 16rpx;
  font-size: 32rpx;
  font-weight: 600;
  color: #FFFFFF;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8rpx 20rpx rgba(27, 124, 94, 0.3);
}

.submit-btn:active {
  opacity: 0.9;
}
</style>
