package data

import (
	"context"

	"github.com/go-kratos/kratos/v2/log"

	"demo/internal/biz"
)

type adRepo struct {
	data *Data
	log  *log.Helper
}

func NewAdRepo(data *Data, logger log.Logger) biz.AdRepo {
	return &adRepo{
		data: data,
		log:  log.NewHelper(logger),
	}
}

func (p *adRepo) List(ctx context.Context, customerId int64, req *biz.ListReportRequest) (int64, biz.AdList, error) {
	db := p.data.db.Table("ads_report_advertise_hour").
		Select("advertise_id AS ad_id,advertise_name AS ad_name, "+reportCommonFiled).
		Where("customer_id = ?", customerId).
		Where("is_delete = ?", 0)

	// add start_date and end_date condition
	if req.StartDate != "" {
		db = db.Where("date_long >= ?", req.StartDateLong)
	}
	if req.EndDate != "" {
		db = db.Where("date_long <= ?", req.EndDateLong)
	}

	var total int64
	if err := db.Count(&total).Error; err != nil {
		return 0, nil, err
	}
	var list biz.AdList
	if err := db.Order(req.GetOrderBy("id") + " " + req.GetOrderByMode()).
		Limit(req.Limit()).Offset(req.Offset()).Scan(&list).Error; err != nil {
		return total, nil, err
	}
	return total, list, nil
}