package main

import (
	"context"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/common"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/dao"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/log"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/model"
	"testing"

	"go.uber.org/zap"
)

func TestList(t *testing.T) {
	Init()
	ctx := context.Background()

	dao := common.NewCommonDAO()
	var objs []model.DailySummary
	dao.ListEntities(ctx, common.ListParams{}, &objs)
	log.Info(ctx, "objs", zap.Any("objs", objs))
	log.PlainInfo("objs", zap.Any("objs", objs))

}
func TestSqlLiteList(t *testing.T) {
	Init()
	dbPath := "/Users/wlt/Documents/GolandProjects/db-file/1372813089209061633/20250701.db"
	db, err := dao.InitSQLiteDB(dbPath)
	if err != nil {
		t.Fatal(err)
	}
	ctx := context.Background()

	dao := common.NewCommonDAOWithDB(db)
	var objs []model.SlowQueryLog
	param := common.ListParams{

		ModelFilters: model.SlowQueryLog{
			Digest:    "22c3101adce33ad3e0d83349120fc23881474e23cbdaade314e82bfd6f506f68",
			QueryTime: 3.072851806,
		},
	}
	dao.ListEntities(ctx, param, &objs)
	log.Info(ctx, "objs", zap.Any("objs", objs))

}

func TestSaveOneEntity(t *testing.T) {
	Init()
	ctx := context.Background()

	dao := common.NewCommonDAO()
	obj := model.DailySummary{
		ReportDate:       "2023-01-01",
		TotalSlowQueries: 100,
		UniqueDigests:    10,
		CriticalCount:    5,
		MajorCount:       2,
		DetailsJson: model.DetailsData{
			CriticalDetails: map[string]int{
				"detail1": 1,
				"detail2": 2,
			},
			MajorDetails: map[string]int{
				"detail3": 1,
			},
		},
	}
	dao.CreateEntity(ctx, &obj)

	comFilter := common.ComFilter{
		ModelFilters: model.DailySummary{
			ReportDate: "2023-01-01",
		},
	}
	var m model.DailySummary
	dao.GetEntity(ctx, comFilter, &m)
	log.Info(ctx, "m", zap.Any("m", m))

}

func TestSaveEntites(t *testing.T) {
	Init()
	ctx := context.Background()

	dao := common.NewCommonDAO()
	obj1 := model.DailySummary{
		ReportDate:       "2023-02-01",
		TotalSlowQueries: 100,
		UniqueDigests:    10,
		CriticalCount:    5,
		MajorCount:       2,
		DetailsJson: model.DetailsData{
			CriticalDetails: map[string]int{
				"detail1": 1,
				"detail2": 2,
			},
			MajorDetails: map[string]int{
				"detail3": 1,
			},
		},
	}
	obj12 := model.DailySummary{
		ReportDate:       "2023-03-02",
		TotalSlowQueries: 100,
		UniqueDigests:    10,
		CriticalCount:    5,
		MajorCount:       2,
		DetailsJson: model.DetailsData{
			CriticalDetails: map[string]int{
				"detail1": 1,
				"detail2": 2,
			},
			MajorDetails: map[string]int{
				"detail3": 1,
			},
		},
	}
	objs := []model.DailySummary{obj1, obj12}

	dao.CreateEntity(ctx, &objs)

	comFilter := common.ComFilter{
		ModelFilters: model.DailySummary{
			ReportDate: "2023-01-01",
		},
	}
	var m model.DailySummary
	dao.GetEntity(ctx, comFilter, &m)
	log.Info(ctx, "m", zap.Any("m", m))

}
