OfferStatistic = {}
OfferStatistic.__index = OfferStatistic

SECONDS_PER_DAY = 86400

OfferStatistic.new = function(timestamp, t, transactions, totalPrice, highestPrice, lowestPrice)
    local stat = {
        time = 0,
        type = nil,
        transactions = 0,
        totalPrice = 0,
        highestPrice = 0,
        lowestPrice = 0
    }
    stat.time = math.floor(timestamp / SECONDS_PER_DAY) * SECONDS_PER_DAY

    if t ~= MarketAction.Buy and t ~= MarketAction.Sell then
        g_logger.error('OfferStatistic.new - invalid type provided.')
    end
    stat.type = t

    stat.transactions = transactions
    stat.totalPrice = totalPrice
    stat.highestPrice = highestPrice
    stat.lowestPrice = lowestPrice

    setmetatable(stat, OfferStatistic)
    return stat
end

function OfferStatistic:isNull()
    return self.time == 0 or not self.type
end

-- Sets/Gets

function OfferStatistic:setTime(time)
    if not time or type(time) ~= 'number' then
        g_logger.error('OfferStatistic.setTime - invalid time provided.')
    end
    self.time = time
end

function OfferStatistic:getTime()
    return self.time
end

function OfferStatistic:setType(t)
    if not t or type(t) ~= 'number' then
        g_logger.error('OfferStatistic.setType - invalid type provided.')
    end
    self.type = t
end

function OfferStatistic:getType()
    return self.type
end

function OfferStatistic:setTransactions(transactions)
    if not transactions or type(transactions) ~= 'number' then
        g_logger.error('OfferStatistic.setTransactions - invalid transactions provided.')
    end
    self.transactions = transactions
end

function OfferStatistic:getTransactions()
    return self.transactions
end

function OfferStatistic:setTotalPrice(amount)
    if not totalPrice or type(totalPrice) ~= 'number' then
        g_logger.error('OfferStatistic.setTotalPrice - invalid total price provided.')
    end
    self.totalPrice = totalPrice
end

function OfferStatistic:getTotalPrice()
    return self.totalPrice
end

function OfferStatistic:setHighestPrice(highestPrice)
    if not highestPrice or type(highestPrice) ~= 'number' then
        g_logger.error('OfferStatistic.setHighestPrice - invalid highestPrice provided.')
    end
    self.highestPrice = highestPrice
end

function OfferStatistic:getHighestPrice()
    return self.highestPrice
end

function OfferStatistic:setLowestPrice(lowestPrice)
    if not lowestPrice or type(lowestPrice) ~= 'number' then
        g_logger.error('OfferStatistic.setLowestPrice - invalid lowestPrice provided.')
    end
    self.lowestPrice = lowestPrice
end

function OfferStatistic:getLowestPrice()
    return self.lowestPrice
end
