-- ========================================================================= --
--                              SylingTracker                                --
--           https://www.curseforge.com/wow/addons/sylingtracker             --
--                                                                           --
--                               Repository:                                 --
--                   https://github.com/Skamer/SylingTracker                 --
--                                                                           --
-- ========================================================================= --
Syling                 "SylingTracker.QuestUtils"                            ""
-- ========================================================================= --
namespace                          "SLT"
-- ========================================================================= --
IsOnShadowlands = Utils.IsOnShadowlands

class "Utils" (function(_ENV)
  
  class "Quest" (function(_ENV)
    -- Cross Support for 9.0 and 8.3 
    -- TODO: Need to remove that later when the prepatch hits live server
    __Static__() function GetNumQuestLogEntries_CrossSupport()
      if IsOnShadowlands() then 
        return C_QuestLog.GetNumQuestLogEntries() 
      else 
        return GetNumQuestLogEntries()
      end
    end

    __Static__() function GetInfo_CrossSupport(questLogIndex)
      if IsOnShadowlands() then 
        local data = C_QuestLog.GetInfo(questLogIndex)
        return data.title, data.questLogIndex, data.questID, data.campaignID,
        data.level, data.difficultyLevel, data.suggestedGroup, data.frequency,
        data.isHeader, data.isCollapsed, data.startEvent, data.isTask, data.isBounty,
        data.isStory, data.isScaling, data.isOnMap, data.hasLocalPOI, data.isHidden,
        data.isAutoComplete, data.overridesSortOrder, data.readyForTranslation
      end

       -- 8.3: The returned values are not in the same order compared to 9.0 replacement
      local title, level, suggestedGroup, isHeader, isCollapsed, isComplete,
      frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI,
      isTask, isBounty, isStory, isHidden = GetQuestLogTitle(questLogIndex)

      local campaignID, difficultyLevel, isScaling,
      isAutoComplete, overridesSortOrder,  readyForTranslation
      -- Need to find an alternative 

      return title, questLogIndex, questID, campaignID, level, difficultyLevel, 
      suggestedGroup, frequency, isHeader, isCollapsed, startEvent, isTask,
      isBounty, isStory, isScaling, isOnMap, hasLocalPOI, isHidden,
      isAutoComplete, overridesSortOrder, readyForTranslation
    end

    
    __Static__() function IsOnMap_CrossSupport(questID)
      

    end

    __Arguments__ { Number }
    __Static__() function GetQuestTagInfo_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.GetQuestTagInfo(questID)
      end

      return GetQuestTagInfo(questID)
    end 

    EnumQuestTag = _G.Enum.QuestTag 
    __Arguments__ { Number, Variable.Optional(Number) }
    __Static__() function IsDungeonQuest(questID, questTag)
      if not questTag then
        questTag = C_QuestLog.GetQuestTagInfo(questID)
      end

      if questTag and questTag.tagID == EnumQuestTag.Dungeon then
        return true
      end

      return false
    end

    __Arguments__ { Number, Variable.Optional(Number) }
    __Static__() function IsRaidQuest(questID, questTag)
      if not questTag then 
        questTag = C_QuestLog.GetQuestTagInfo(questID)
      end
      
      if questTag and questTag.tagID == EnumQuestTag.Raid then 
        return true 
      end

      return false
    end


    __Arguments__ { Number }
    __Static__() function IsLegendaryQuest_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.IsLegendaryQuest(questID)
      end 
      
      return false
    end
    
    
    __Arguments__ { Number }
    __Static__() function GetDistanceSqToQuest_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.GetDistanceSqToQuest(questID)
      end 

      local questLogIndex = GetQuestLogIndexByID(questID)
      return GetDistanceSqToQuest(questLogIndex)
    end

    __Arguments__ { Number }
    __Static__() function IsQuestBounty_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.IsQuestBounty(questID)
      end 

      return IsQuestBounty(questID)
    end
    
    __Static__() function IsQuestTask_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.IsQuestTask(questID)
      end 

      return IsQuestTask(questID)
    end

    __Static__() function IsQuestFlaggedCompleted_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.IsQuestFlaggedCompleted(questID)
      end 

      return IsQuestFlaggedCompleted(questID)
    end

    __Static__() function IsComplete_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.IsComplete(questID)
      end 

      return IsQuestComplete(questID)
    end

    __Static__() function GetNumQuestWatches_CrossSupport()
      if IsOnShadowlands() then 
        return C_QuestLog.GetNumQuestWatches()
      end 

      return GetNumQuestWatches()
    end

    __Static__() function IsQuestWatched_CrossSupport(questID)
      if IsOnShadowlands() then 
        return QuestUtils_IsQuestWatched(questID)
      end 

      return IsQuestWatched(questID)
    end

    __Static__() function GetQuestLogIndexByID_CrossSupport(questID)
      if IsOnShadowlands() then 
        return C_QuestLog.GetLogIndexForQuestID(questID)
      end

      return GetQuestLogIndexByID(questID)
    end 

  end)
end)
