package wrap

import (
	"github.com/30x/apid"
	"github.com/mattn/go-sqlite3"
	"database/sql/driver"
)

type wrapConn struct {
	*sqlite3.SQLiteConn
	log apid.LogService
}

func (c *wrapConn) Swap(cc *sqlite3.SQLiteConn) {
	c.SQLiteConn = cc
}

func (c *wrapConn) Prepare(query string) (driver.Stmt, error) {
	c.log.Debugf("begin prepare stmt: %s", query)

	stmt, err := c.SQLiteConn.Prepare(query)
	if err != nil {
		c.log.Errorf("prepare stmt failed: %s", err)
		return nil, err
	}

	c.log.Debug("end prepare stmt")
	s := stmt.(*sqlite3.SQLiteStmt)
	return &wrapStmt{s, c.log}, nil
}

func (c *wrapConn) Begin() (driver.Tx, error) {
	c.log.Debug("begin trans")

	tx, err := c.SQLiteConn.Begin()
	if err != nil {
		c.log.Errorf("begin trans failed: %s", err)
		return nil, err
	}

	c.log.Debug("end begin trans")
	t := tx.(*sqlite3.SQLiteTx)
	return &wrapTx{t, c.log}, nil
}

func (c *wrapConn) Close() (err error) {
	c.log.Debug("begin close")

	if err = c.SQLiteConn.Close(); err != nil {
		c.log.Errorf("close failed: %s", err)
		return
	}

	c.log.Debug("end close")
	return
}

func (c *wrapConn) Query(query string, args []driver.Value) (driver.Rows, error) {
	c.log.Debugf("query: %s args: %#v", query, args)
	return c.SQLiteConn.Query(query, args)
}
