package controller

import (
	"time"

	"github.com/gin-gonic/gin"
	"gitlab.com/tensorsecurity-rd/waf-console/internal/model"
	"gitlab.com/tensorsecurity-rd/waf-console/internal/service"
	"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
)

type IpInfoController struct {
	service service.Service
	// controller.Api
}

var isMock bool

// func NewIpInfoController(apiKey string) *IpInfoController {
// 	mock := os.Getenv("MOCK")
// 	// var isMock bool
// 	if mock == "true" {
// 		isMock = true
// 	}

// 	useCachedIPInfo := os.Getenv("USE_IPINFO_CACHE")
// 	mode := os.Getenv("MODE")
// 	if mode == "private" {
// 		return &IpInfoController{
// 			service: service.NewIpServicePrivate(config.WeibuUrl, apiKey, useCachedIPInfo == "true"),
// 		}
// 	} else {
// 		return &IpInfoController{
// 			service: service.NewIpService(config.WeibuUrl, apiKey, useCachedIPInfo == "true"),
// 		}
// 	}
// }

func mockResponse(ctx *gin.Context) {
	ipInfo := model.IPInfo{
		Location: model.Location{
			Country:     "United States",
			Province:    "New York",
			City:        "New York City",
			Longitude:   -74.006,
			Latitude:    40.713,
			CountryCode: "US",
		},
		Carrier: "China mobile",
		OSSIntelligences: []model.Intelligence{
			{
				Source:     "ThreatBook Labs",
				Confidence: 70,
				Expired:    false,
				FindTime:   time.Now().UnixMilli(),
				UpdateTime: time.Now().UnixMilli(),
				IntelTypes: []string{},
				IntelTags:  []model.TagsClass{},
			},
		},
		OnlineIntelligences: []model.Intelligence{
			{
				Source:     "ThreatBook Labs",
				Confidence: 90,
				Expired:    true,
				FindTime:   time.Now().UnixMilli(),
				UpdateTime: time.Now().UnixMilli(),
				IntelTypes: []string{"aaa"},
				IntelTags: []model.TagsClass{
					{
						TagsType: "industry",
						Tags:     "aaaa",
					},
				},
			},
		},
		Ports: []model.Port{
			{
				Port:    80,
				Module:  "ddd",
				Product: "test",
				Version: "4",
				Detail:  "none",
			},
		},
		Samples: []model.Sample{
			{
				Hash:          "12344",
				ScanTime:      time.Now().UnixMilli(),
				Ratio:         "19/25",
				MalwareType:   "attck",
				MalwareFamily: "wwww",
			},
		},
		Cas: []model.CAS{
			{
				Protocol: "ssl",
				Port:     443,
				Period:   122,
				DigitalCertificate: model.Certificate{
					Subject:     "CloudFlare Origin Certificate",
					Fingerprint: "857b7363019f1bf550375d56fa1f483ffb72bdef",
					Purpose:     "SSL client|SSL server|Netscape SSL server|Any Purpose|Any Purpose CA|OCSP helper",
				},
			},
		},
		Rdnses: []model.RDNS{
			{
				RDNS:    "aa",
				GetTime: "",
			},
		},
		TagsClasses: []model.TagsClass{
			{
				TagsType: "hijacked",
				Tags:     "",
			},
		},
		Scene:       "测试",
		IsMalicious: true,
	}

	resp := &utils.SingleRespData{
		Item: ipInfo,
	}
	utils.AssembleResponse(ctx, resp, nil)
}

// func (c *IpInfoController) QueryIP(ctx *gin.Context) {
// 	ip := ctx.Param("ip")
// 	if isMock {
// 		logging.Get().Info().Msg("mock data")
// 		mockResponse(ctx)
// 		return
// 	}

// 	ipInfo, err := c.service.QueryIP(ip)
// 	if err != nil {
// 		logging.Get().Err(err).Msgf("query ip info")
// 		utils.AssembleResponse(ctx, nil, err)
// 		// ctx.JSON(http.StatusInternalServerError, err)
// 		return
// 	}

// 	resp := &utils.SingleRespData{
// 		Item: ipInfo,
// 	}
// 	utils.AssembleResponse(ctx, resp, nil)
// }
