// Code generated by gowebx, DO AVOID EDIT.
package vqd

import (
	"context"
	"git.lnton.com/lnton/pkg/orm"
	"git.lnton.com/lnton/pkg/reason"
	"github.com/jinzhu/copier"
	"log/slog"
)

// VqdTaskStorer Instantiation interface
type VqdTaskStorer interface {
	Find(context.Context, *[]*VqdTask, orm.Pager, ...orm.QueryOption) (int64, error)
	FindAll(dp *[]*VqdTask) (int64, error)
	Get(context.Context, *VqdTask, ...orm.QueryOption) error
	Add(context.Context, *VqdTask) error
	Edit(context.Context, *VqdTask, func(*VqdTask), ...orm.QueryOption) error
	Del(context.Context, *VqdTask, ...orm.QueryOption) error
	EditStatus(status int, id int) error
	EditStatusError(id, status int, s string) error
}

// FindVqdTaskAll Paginated search
func (c Core) FindVqdTaskAll() ([]*VqdTask, int64, error) {
	items := make([]*VqdTask, 0)
	total, err := c.store.VqdTask().FindAll(&items)
	if err != nil {
		return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
	}
	return items, total, nil
}

// FindVqdTemplateID Paginated search
func (c Core) FindVqdPlanID(ctx context.Context, id int) ([]*VqdTask, int64, error) {
	items := make([]*VqdTask, 0)
	in := &FindVqdTaskInput{}
	in.Size = 99999
	in.Page = 1
	query := orm.NewQuery(2).Where("time_template_id = ?", id)
	total, err := c.store.VqdTask().Find(ctx, &items, in, query.Encode()...)
	if err != nil {
		return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
	}
	return items, total, nil
}

// FindVqdTemplateID Paginated search
func (c Core) FindVqdTemplateID(ctx context.Context, id int) ([]*VqdTask, int64, error) {
	items := make([]*VqdTask, 0)
	in := &FindVqdTaskInput{}
	in.Size = 99999
	in.Page = 1
	query := orm.NewQuery(2).Where("task_template_id = ?", id)
	total, err := c.store.VqdTask().Find(ctx, &items, in, query.Encode()...)
	if err != nil {
		return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
	}
	return items, total, nil
}

// FindVqdTask Paginated search
func (c Core) FindVqdTask(ctx context.Context, in *FindVqdTaskInput) ([]*VqdTask, int64, error) {
	items := make([]*VqdTask, 0)
	if in.Name != "" {
		query := orm.NewQuery(8).
			Where("name like ?", "%"+in.Name+"%").OrderBy("created_at DESC")
		total, err := c.store.VqdTask().Find(ctx, &items, in, query.Encode()...)
		if err != nil {
			return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
		}
		return items, total, nil
	} else {
		query := orm.NewQuery(2).OrderBy("created_at DESC")
		total, err := c.store.VqdTask().Find(ctx, &items, in, query.Encode()...)
		if err != nil {
			return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
		}
		return items, total, nil
	}
}

// FindVqdTaskTemplateID Query a single object
func (c Core) FindVqdTaskTemplateID(ctx context.Context, id int) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Get(ctx, &out, orm.Where("task_template_id=?", id)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}

// FindVqdTaskPlanID Query a single object
func (c Core) FindVqdTaskPlanID(ctx context.Context, id int) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Get(ctx, &out, orm.Where("time_template_id=?", id)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}

// GetVqdTask Query a single object
func (c Core) GetVqdTask(ctx context.Context, id int) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Get(ctx, &out, orm.Where("id=?", id)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}

func (c Core) GetNameVqdTask(ctx context.Context, name string) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Get(ctx, &out, orm.Where("name=?", name)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}
func (c Core) GetNameVqdTaskChannelID(ctx context.Context, name string) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Get(ctx, &out, orm.Where("channel_id=?", name)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}

// AddVqdTask Insert into database
func (c Core) AddVqdTask(ctx context.Context, in *AddVqdTaskInput) (*VqdTask, error) {
	var out VqdTask
	if err := copier.Copy(&out, in); err != nil {
		slog.Error("Copy", "err", err)
	}
	if err := c.store.VqdTask().Add(ctx, &out); err != nil {
		return nil, reason.ErrDB.Withf(`Add err[%s]`, err.Error())
	}
	return &out, nil
}

// EditVqdTask Update object information
func (c Core) EditVqdTask(ctx context.Context, in *EditVqdTaskInput, id int) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Edit(ctx, &out, func(b *VqdTask) {
		if err := copier.Copy(b, in); err != nil {
			slog.Error("Copy", "err", err)
		}
	}, orm.Where("id=?", id)); err != nil {
		return nil, reason.ErrDB.Withf(`Edit err[%s]`, err.Error())
	}
	return &out, nil
}

// DelVqdTask Delete object
func (c Core) DelVqdTask(ctx context.Context, id int) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Del(ctx, &out, orm.Where("id=?", id)); err != nil {
		return nil, reason.ErrDB.Withf(`Del err[%s]`, err.Error())
	}
	return &out, nil
}

func (c Core) DelVqdTaskAll(ctx context.Context, ids []int) (*VqdTask, error) {
	var out VqdTask
	if err := c.store.VqdTask().Del(ctx, &out, orm.Where("id in (?)", ids)); err != nil {
		return nil, reason.ErrDB.Withf(`Del ids err[%s]`, err.Error())
	}
	return &out, nil
}

// VqdTaskStatus Update
func (c Core) VqdTaskStatus(status int, id int) error {
	if err := c.store.VqdTask().EditStatus(status, id); err != nil {
		return reason.ErrDB.Withf(`Status err[%s]`, err.Error())
	}
	return nil
}

// VqdTaskStatus Update
func (c Core) VqdTaskStatusError(id, status int, s string) error {
	if err := c.store.VqdTask().EditStatusError(id, status, s); err != nil {
		return reason.ErrDB.Withf(`StatusError err[%s]`, err.Error())
	}
	return nil
}
