package dao

import (
	"github.com/druidcaesa/gotool"
	req2 "ulink-admin/modules/system/models/req"
	response2 "ulink-admin/modules/system/models/response"
	"ulink-admin/pkg/base"
	"ulink-admin/pkg/page"
	"xorm.io/xorm"
)

type CodeDao struct {
}

// 查询公共sql
func (d CodeDao) queryTableSql() *xorm.Session {
	return base.SqlDB.NewSession().Table([]string{"information_schema.tables", "t"})
}

// 查询公共sql
func (d CodeDao) queryColumSql() *xorm.Session {
	return base.SqlDB.NewSession().Table([]string{"information_schema.columns", "t"})
}

// Find 查询用户集合
func (d CodeDao) FindTable(query req2.TableQuery) ([]*response2.TableResponse, int64) {
	resp := make([]*response2.TableResponse, 0)
	sql := d.queryTableSql()
	sql.And("t.table_schema = (select database())")

	if gotool.StrUtils.HasNotEmpty(query.TableName) {
		sql.And("table_name = ?", query.TableName)
	}
	sql.Desc("create_time")
	total, err := sql.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).FindAndCount(&resp)
	if err != nil {
		gotool.Logs.ErrorLog().Println(err)
		return nil, 0
	}
	return resp, total
}

// Find 查询用户集合
func (d CodeDao) FindColumn(query req2.ColnumQuery) ([]*response2.ColumnResponse, int64) {
	resp := make([]*response2.ColumnResponse, 0)
	sql := d.queryColumSql()
	sql.And("t.table_schema = (select database())")
	sql.And("t.table_name =?", query.TableName)
	total, err := sql.FindAndCount(&resp)
	if err != nil {
		gotool.Logs.ErrorLog().Println(err)
		return nil, 0
	}
	return resp, total
}