package database

import (
	"fmt"
	"time"
)

// New entry in the news table
type New struct {
	ID   int       `pg:"type:serial"`
	Date time.Time `pg:"type:timestamp"`
	Text string
}

// AddNews creates a new entry
func (db *pgDB) AddNews(text string) error {
	return db.AddRawNews(text, time.Now())
}

func (db *pgDB) AddRawNews(text string, date time.Time) error {
	_, err := db.sql.Model(&New{
		Text: text,
		Date: date,
	}).Insert()
	return err
}

// GetNews returns all the news for the last 'days' limiting with a maximum of 'num' results
func (db *pgDB) GetNews(num int, days int) ([]New, error) {
	var news []New
	query := db.sql.Model(&news)

	if days != 0 {
		daystr := fmt.Sprintf("%d days", days)
		query = query.Where("date > CURRENT_TIMESTAMP-?::interval", daystr)
	}

	err := query.Limit(num).
		Order("date DESC").
		Select()
	return news, err
}