package db

import (
	"fmt"
	"strings"
)

type Table struct {
	Name string
	SQL  string
}

func findTable(db *DB, tableName string) (*Table, error) {
	where, args := []string{"1 = 1"}, []interface{}{}

	where, args = append(where, "type = ?"), append(args, "table")
	where, args = append(where, "name = ?"), append(args, tableName)

	rows, err := db.Db.Query(`
		SELECT
			tbl_name,
			sql
		FROM sqlite_schema
		WHERE `+strings.Join(where, " AND "),
		args...,
	)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	tableList := make([]*Table, 0)
	for rows.Next() {
		var table Table
		if err := rows.Scan(
			&table.Name,
			&table.SQL,
		); err != nil {
			return nil, err
		}

		tableList = append(tableList, &table)
	}

	if err := rows.Err(); err != nil {
		return nil, err
	}

	if len(tableList) == 0 {
		return nil, nil
	} else {
		return tableList[0], nil
	}
}

func createTable(db *DB, sql string) error {
	result, err := db.Db.Exec(sql)

	rows, _ := result.RowsAffected()
	if rows == 0 {
		return fmt.Errorf("failed to create table with %s", sql)
	}

	return err
}
