package cache

import (
  "encoding/json"

  "github.com/mrusme/superhighway84/models"
  "github.com/tidwall/buntdb"
)

type Cache struct {
  db               *buntdb.DB
  dbPath           string
}

func NewCache(dbPath string) (*Cache, error) {
  var err error

  cache := new(Cache)
  cache.dbPath = dbPath
  cache.db, err = buntdb.Open(cache.dbPath)
  if err != nil {
    return nil, err
  }

  return cache, nil
}

func(cache *Cache) Close() {
  cache.db.Close()
}

func(cache *Cache) StoreArticle(article *models.Article) (error) {
  modelJson, jsonErr := json.Marshal(article)
  if jsonErr != nil {
    return jsonErr
  }

  err := cache.db.Update(func(tx *buntdb.Tx) error {
    _, _, err := tx.Set(article.ID, string(modelJson), nil)
    return err
  })
  return err
}

func(cache *Cache) LoadArticle(article *models.Article) (error) {
  err := cache.db.View(func(tx *buntdb.Tx) error {
    value, err := tx.Get(article.ID)
    if err != nil{
      return err
    }

    json.Unmarshal([]byte(value), article)
    return nil
  })
  return err
}

