package org.jeecg.modules.duan.scala

import com.alibaba.fastjson.{JSONArray, JSONObject}
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
import org.jeecg.modules.drag.config.common.Result
import org.jeecg.modules.duan.java.entity.Ranking
import org.jeecg.modules.duan.java.mapper.MusicMapper

import java.lang
import java.util.{Collections, Comparator}
import scala.jdk.CollectionConverters.{IterableHasAsJava, IterableHasAsScala, ListHasAsScala}

/**
 * 这个对象提供了排行榜分析的功能。
 */
object Analysis {

  private var musicMapper: MusicMapper = _ // Define the field for MusicMapper

  /**
   * 检索排行榜并根据评论进行排序。
   *
   * @return Result 包含根据评论排序的排行榜的 JSON 数组。
   */

  def getRanking: Result[JSONArray] = {
    val rankings: List[Ranking] = null // 从数据库或其他来源获取排行榜
    val result: JSONArray = new JSONArray
    System.out.println(rankings) // 用于调试的日志排行榜

    // Sort the rankings using Scala's sorting methods
    val sortedRankings = rankings.sortBy(_.getComment)

    for (ranking <- sortedRankings) {
      System.out.println("\n\n\n\n\n" + ranking) // 打印每个排名信息，用于调试
      val `object`: JSONObject = new JSONObject
      `object`.put("comment", ranking.getComment) // 将评论信息添加到 JSON 对象中
      `object`.put("singer", ranking.getSinger) // 将歌手信息添加到 JSON 对象中
      `object`.put("songName", ranking.getName) // 将歌曲名称添加到 JSON 对象中
      result.add(`object`) // 将 JSON 对象添加到结果数组中
    }

    val updateWrapper: UpdateWrapper[Ranking] = new UpdateWrapper[Ranking]
    updateWrapper.setSql("comment=comment- FLOOR(   RAND()*100  )") // 随机减少评论数量
    musicMapper.update(null, updateWrapper) // 更新数据库中的排行榜评论数量

    Result.OK(result) // 返回带有排序后排行榜信息的成功结果
  }


  // Define a method to set the MusicMapper field
  def setMusicMapper(musicMapper: MusicMapper): Unit = {
    this.musicMapper = musicMapper
  }

  // Define a class for ComparatorList implementing Comparator[Ranking]
  private class ComparatorList extends Comparator[Ranking] {
    override def compare(o1: Ranking, o2: Ranking): Int = {
      if (o1.getComment > o2.getComment) 1
      else -1
    }
  }
}
