Module:VillageTest

From RetroMC
Revision as of 19:45, 30 January 2025 by Thecow275 (talk | contribs) (Disabling memory intensive loggin functions since it causes the module to eat the whole 50mb of memory somehow)
Jump to navigation Jump to search

Documentation for this module may be created at Module:VillageTest/doc

local p  =  {}
local capiunto = require 'capiunto'


--[ Thecow275's WikiStats V2 VIllages MODULE PROTOTYPE ]
--[ Nicknamed: UUID and J-Village Update]

local function preprocessArg(s)
if not s then
    return nil 
end
s = s:match('^%s*(.-)%s*$') --trim whitespace
if s == '' then
    return nil
else
    return s
    end

end

local debug = 0;

function p.debug(frame)
    debug = 1;
p.main(
    mw.getCurrentFrame():newChild{
        title = "Module:VillageTest",
        args ={"thecow275","villagelist"}
    
     }
    
    )

end


function p.main(frame)
    local args = frame.args
    local input = preprocessArg(args[1])
    local infoboxtype = preprocessArg(args[2]) -- currently unused will be used whenever I implement more datatypes
    

   if not input then -- CHECK FOR BLANK INPUT
       return 'INPUT ERROR INPUT IS NULL'
    end
   if infoboxtype == "{{{2}}}" then
    infoboxtype = "playervillages"
    
   end

    local uuid = '8fa8f70d-eb7d-4743-b0ad-837cdfb69f4e' --[thecow275]--
    --local uuid = 'b08b6a7a-aada-4787-bb4b-07fc393ad6e5' --[QueenOfAsh]--
    local villagelist = mw.ext.externalData.getExternalData({
        url =  "https://api.retromc.org/api/v1/village/getVillageList",
        format =  'json',
        data = villages
    })
     --mw.log('Village List API')
     --mw.logObject(villagelist.villages)
     --mw.logObject(villagelist.error)

    local playerVillages = mw.ext.externalData.getExternalData({
        url = "https://statistics.retromc.org/api/user_villages?uuid=" .. uuid,
        format = 'json',
        data = url

    })
    
    local retval = capiunto.create({
        top = 'TESTING',
        bodyClass = 'icr-DiamondCitizenBodyStyle',
        topClass = 'icr-title'
    })

    retval:addRow('HOWDY', 'HOWDEE', '', 'icr-transparency1 icr-data')

    
    if playerVillages.__json.data then

        --table.insert(villagels, "1st layer works")
        
        function villagehelper(PV_Input, PV_Name)
            local PV_Input =  PV_Input
            local PV_Name = PV_Name
            retval:addHeader(PV_Name)
            mw.log(' DATA FOR:  '..PV_Name..':')
                    for i, PV_Data in ipairs(PV_Input) do  --[[ For Example: playerVillages.__json.data.member ]]--
                         --mw.log('villagehelper iterations:  '..i)
                         --mw.logObject(PV_Data)
                         
                        if PV_Data ~= nil then
                            if type(PV_Data) == "table" and PV_Data.village then
                                mw.logObject(PV_Data.village)
                                mw.log('SUCCESS: PV_Data is a Table')
                                local PV_Data_Local = PV_Data.village
                            
                                retval:addRow('',PV_Data_Local,'','icr-transparency1 icr-data')
                            
                            elseif type(PV_Data) == "string" or PV_Data == nil then
                                mw.logObject(PV_Data)
                                --local PV_Data_Local = 'ERROR: API FAILURE'
                                mw.log('ERROR: PV_Data is a String or nil, Supposed to be a Table')
                            end
                        
                        elseif PV_Data == nil then
                            mw.log('ERROR PV_Data is nil ABORTING')
                            retval:addRow('','API ERROR RETURNING NIL','','icr-transparencry1 icr-data')
                        
                        end
                    end
        end
        function villagelistprocessor(VP_Input, VP_Name)
            local VP_Input = VP_Input
            local VP_Name = VP_Name
            retval:addHeader(VP_Name)
            for i, VP_Data in ipairs(VP_Input) do

                if VP_Data ~= nil then


                if type(VP_Data) == "table" and VP_Data.name and VP_Data.uuid and VP_Data.owner then
                    local VP_Data_Local = VP_Data.name
                    local VP_UUID_Local = VP_Data.uuid
                    local VP_OWNER_LOCAL = VP_Data.owner
                  --  mw.log("Village Number: "..i) 
                    --mw.log("UUID: ") 
                    --mw.logObject(VP_Data.uuid,'UUID')
                    --mw.logObject(VP_Data.owner, 'Owner UUID')

                    

                    retval:addRow('Name:',VP_Data_Local,'','icr-transparency1 icr-data')
                    retval:addRow('UUID',VP_UUID_Local,'','icr-transparency1 icr-data')
                    retval:addRow('OWNER UUID',VP_OWNER_LOCAL,'','icr-transparency1 icr-data')
                   -- mw.logObject(VP_Data.name,'NAME') -- We Printing the VP_Data_Local into console here


                elseif type(VP_Data) == "string" or VP_Data == nil then
                    --mw.logObject(VP_Data)
                    mw.log('VP_Data is nil this shouldn\'t be the case')

                end
                elseif VP_Data == nil then
                    mw.log('ERROR VP_Data is nil ABORTING')
                            retval:addRow('','API ERROR RETURNING NIL','','icr-transparencry1 icr-data')

                end
        
        

        end
        end
        if infoboxtype == "playervillages" then
                villagehelper(playerVillages.__json.data.member, "Member")
                villagehelper(playerVillages.__json.data.owner, "Owner")
                villagehelper(playerVillages.__json.data.assistant, "Assistant")
        elseif infoboxtype == "villagelist" then
            --    mw.log('--------------------------------------')
              --  mw.log('|                                              |')
             --   mw.log('|    VILLAGE LIST TESTING    |')
             --   mw.log('|                                              |')
              --  mw.log('--------------------------------------')
             --   mw.logObject(villagelistprocessor(villagelist, "Villages"))
                villagelistprocessor(villagelist, "Villages")
                --mw.logObject(villagelist.__json)
        end


        
       
            
        
        
        
    end
    --mw.logObject(villagels)
    --mw.logObject(playerVillages.__json.data.member)
    --mw.logObject(member.village)
    --mw.logObject(playerVillages.data)
    --mw.logObject(playerVillages.status)
    --mw.logObject(villagelist.villages)
    return retval
end
return p