// Copyright (c) 2012-2014 Jeremy Latt
// released under the MIT license

package irc

import (
	"database/sql"
	"fmt"
	"log"
	"os"

	_ "github.com/mattn/go-sqlite3"
)

func InitDB(path string) {
	os.Remove(path)
	db := OpenDB(path)
	defer db.Close()
	_, err := db.Exec(`
        CREATE TABLE channel (
          name TEXT NOT NULL UNIQUE,
          flags TEXT DEFAULT '',
          key TEXT DEFAULT '',
          topic TEXT DEFAULT '',
          user_limit INTEGER DEFAULT 0,
          ban_list TEXT DEFAULT '',
          except_list TEXT DEFAULT '',
          invite_list TEXT DEFAULT '')`)
	if err != nil {
		log.Fatal("initdb error: ", err)
	}
}

func UpgradeDB(path string) {
	db := OpenDB(path)
	alter := `ALTER TABLE channel ADD COLUMN %s TEXT DEFAULT ''`
	cols := []string{"ban_list", "except_list", "invite_list"}
	for _, col := range cols {
		_, err := db.Exec(fmt.Sprintf(alter, col))
		if err != nil {
			log.Fatal("updatedb error: ", err)
		}
	}
}

func OpenDB(path string) *sql.DB {
	db, err := sql.Open("sqlite3", path)
	if err != nil {
		log.Fatal("open db error: ", err)
	}
	return db
}