package dao

import (
	"enterprise/common/model"
	"fmt"
	"gorm.io/gorm"
)

type ExternalCorpOrder struct {
}

func NewExternalCorpOrder() *ExternalCorpOrder {
	return &ExternalCorpOrder{}
}

func (d *ExternalCorpOrder) TableName() string {
	return "cp_order"
}

func (d *ExternalCorpOrder) QueryOwnerOrder(owner string, startTime, endTime int64) ([]*model.ExternalCorpOrder, error) {
	orderTable := d.TableName()
	tx := corpDB.Table(orderTable)

	var o []*model.ExternalCorpOrder

	tx.Where(orderTable+".status = ?", 2)

	tx.Where("cp_user.username = ?", owner)
	tx.Where(orderTable+".pay_time >= ?", startTime)
	tx.Where(orderTable+".pay_time <= ?", endTime)

	tx.Joins(fmt.Sprintf("LEFT JOIN cp_user ON %s.admin_id=cp_user.id", orderTable))
	tx.Where("cp_user.username = ?", owner)
	tx = tx.Find(&o)
	if tx.Error == gorm.ErrRecordNotFound {
		return o, nil
	}

	if tx.Error != nil {
		return nil, tx.Error
	}
	return o, nil
}

func (d *ExternalCorpOrder) QueryProcessOrder(owner string, startTime, endTime int64) ([]*model.ExternalCorpOrder, error) {
	orderTable := d.TableName()
	tx := corpDB.Table(orderTable)

	var o []*model.ExternalCorpOrder

	tx.Where(orderTable+".process_status = ?", 2)

	tx.Where("cp_user.username = ?", owner)
	tx.Where(orderTable+".pay_time >= ?", startTime)
	tx.Where(orderTable+".pay_time <= ?", endTime)

	tx.Joins(fmt.Sprintf("LEFT JOIN cp_user ON %s.process_id=cp_user.id", orderTable))
	tx.Where("cp_user.username = ?", owner)
	tx = tx.Find(&o)
	if tx.Error == gorm.ErrRecordNotFound {
		return o, nil
	}

	if tx.Error != nil {
		return nil, tx.Error
	}
	return o, nil
}