package router

import (
	"github.com/gin-gonic/gin"
	"iot_manager_service/app/device/controller"
	"iot_manager_service/app/middleware"
	user "iot_manager_service/app/system/controller"
)

func InitRouter(engine *gin.Engine) {
	// 跨域处理
	engine.Use(middleware.Cors())
	// 登录验证中间件
	engine.Use(middleware.CheckLogin())
	// 校验权限
	engine.Use(middleware.CheckAuth())

	// 设备管理
	device := engine.Group("/api/longchi/device/")

	// 设备管理
	handleHistory := engine.Group("/api/longchi/handlehistory")
	{
		handleHistory.GET("/list", controller.HandleHistory.List)
	}

	//桥梁
	bridge := device.Group("bridge")
	{
		bridge.GET("/detail", controller.Bridge.Detail)
		bridge.GET("/list", controller.Bridge.List)
		bridge.POST("/submit", controller.Bridge.CreateOrUpdate)
		bridge.POST("/remove", controller.Bridge.Remove)
		bridge.GET("/dropdown", controller.Bridge.GetList)
		bridge.POST("/import-excel", controller.Bridge.ImportExcel)
		bridge.GET("/export-excel", controller.Bridge.ExportExcel)
		bridge.GET("/export-template", controller.Bridge.ExportTemplate)
	}

	//桥梁传感器 控制器
	bridgeSensor := device.Group("bridgesensor")
	{
		bridgeSensor.GET("/detail", controller.BridgeSensor.Detail)
		bridgeSensor.GET("/list", controller.BridgeSensor.List)
		bridgeSensor.POST("/submit", controller.BridgeSensor.CreateOrUpdate)
		bridgeSensor.POST("/remove", controller.BridgeSensor.Remove)
		bridgeSensor.GET("/dropdown", controller.BridgeSensor.GetList)
		bridgeSensor.POST("/enable-disable", controller.BridgeSensor.Enable)
		bridgeSensor.POST("/import-excel", controller.BridgeSensor.ImportExcel)
		bridgeSensor.GET("/export-excel", controller.BridgeSensor.ExportExcel)
		bridgeSensor.GET("/export-template", controller.BridgeSensor.ExportTemplate)
	}

	//摄像头
	camera := device.Group("/camera")
	{
		camera.GET("/detail", controller.Camera.Detail)
		camera.GET("/list", controller.Camera.List)
		camera.POST("/submit", controller.Camera.CreateOrUpdate)
		camera.POST("/remove", controller.Camera.Remove)
		camera.POST("/import-excel", controller.Camera.ImportExcel)
		camera.GET("/export-excel", controller.Camera.ExportExcel)
		camera.GET("/export-template", controller.Camera.ExportTemplate)
		camera.POST("/enable-disable", controller.Camera.Enable)
		camera.GET("/getList", controller.Camera.GetList)
	}

	//抓拍单元+卡口 控制器
	captureUnit := device.Group("captureunit")
	{
		captureUnit.GET("/detail", controller.CaptureUint.Detail)
		captureUnit.GET("/capture-list", controller.CaptureUint.CaptureList)
		captureUnit.POST("/capture-submit", controller.CaptureUint.CaptureSubmit)
		captureUnit.GET("/capture-pull-down-list", controller.CaptureUint.CaptureGetList)
		captureUnit.GET("/point-list", controller.CaptureUint.PointList)
		captureUnit.POST("/point-submit", controller.CaptureUint.PointSubmit)
		captureUnit.GET("/point-pull-down-list", controller.CaptureUint.PointGetList)
		captureUnit.POST("/remove", controller.CaptureUint.Remove)
	}

	//垃圾桶台账 控制器
	garbage := device.Group("garbage")
	{
		garbage.GET("/detail", controller.Garbage.Detail)
		garbage.GET("/list", controller.Garbage.List)
		garbage.POST("/submit", controller.Garbage.CreateOrUpdate)
		garbage.POST("/remove", controller.Garbage.Remove)
		garbage.GET("/dropdown", controller.Garbage.GetList)
		garbage.POST("/import-excel", controller.Garbage.ImportExcel)
		garbage.GET("/export-excel", controller.Garbage.ExportExcel)
		garbage.GET("/export-template", controller.Garbage.ExportTemplate)
	}

	//垃圾桶道路分组管理 控制器
	garbageWayGroup := device.Group("garbage-way-group")
	{
		garbageWayGroup.GET("/detail", controller.GarbageWay.Detail)
		garbageWayGroup.GET("/list", controller.GarbageWay.List)
		garbageWayGroup.POST("/submit", controller.GarbageWay.CreateOrUpdate)
		garbageWayGroup.POST("/remove", controller.GarbageWay.Remove)
		garbageWayGroup.GET("/getList", controller.GarbageWay.GetList)
	}

	//信息屏基本信息 控制器
	infoBoard := device.Group("infoboard")
	{
		infoBoard.GET("/detail", controller.InfoBoard.Detail)
		infoBoard.GET("/list", controller.InfoBoard.List)
		infoBoard.POST("/submit", controller.InfoBoard.CreateOrUpdate)
		infoBoard.POST("/remove", controller.InfoBoard.Remove)
		infoBoard.POST("/import-excel", controller.InfoBoard.ImportExcel)
		infoBoard.GET("/export-excel", controller.InfoBoard.ExportExcel)
		infoBoard.GET("/export-template", controller.InfoBoard.ExportTemplate)
		infoBoard.GET("/system-operation", controller.InfoBoard.CreateOrUpdate)
		infoBoard.POST("/enable-disable", controller.InfoBoard.Enable)
		infoBoard.POST("/show-setting", controller.InfoBoard.ShowSetting)
	}

	//IP广播基本信息 控制器
	ipBroadCast := device.Group("ipbroadcast")
	{
		ipBroadCast.GET("/detail", controller.IpBroadcast.Detail)
		ipBroadCast.GET("/list", controller.IpBroadcast.List)
		ipBroadCast.POST("/submit", controller.IpBroadcast.CreateOrUpdate)
		ipBroadCast.POST("/remove", controller.IpBroadcast.Remove)
		ipBroadCast.POST("/import-excel", controller.IpBroadcast.ImportExcel)
		ipBroadCast.GET("/export-excel", controller.IpBroadcast.ExportExcel)
		ipBroadCast.GET("/export-template", controller.IpBroadcast.ExportTemplate)
		ipBroadCast.POST("/setting-volume", controller.IpBroadcast.SettingVolume)
	}

	//一键报警服务表 控制器
	Alarm := device.Group("akeyalarmserve")
	{
		Alarm.GET("/detail", controller.Alarm.Detail)
		Alarm.GET("/list", controller.Alarm.List)
		Alarm.POST("/submit", controller.Alarm.CreateOrUpdate)
		Alarm.POST("/remove", controller.Alarm.Remove)
		Alarm.GET("/getList", controller.Alarm.GetList)
		Alarm.POST("/import-excel", controller.Alarm.ImportExcel)
		Alarm.GET("/export-excel", controller.Alarm.ExportExcel)
		Alarm.GET("/export-template", controller.Alarm.ExportTemplate)
	}

	//一键报警终端表 控制器
	AlarmTerminal := device.Group("akeyalarmterminal")
	{
		AlarmTerminal.GET("/detail", controller.AlarmTerminal.Detail)
		AlarmTerminal.GET("/list", controller.AlarmTerminal.List)
		AlarmTerminal.POST("/submit", controller.AlarmTerminal.CreateOrUpdate)
		AlarmTerminal.POST("/remove", controller.AlarmTerminal.Remove)
		AlarmTerminal.POST("/import-excel", controller.AlarmTerminal.ImportExcel)
		AlarmTerminal.GET("/export-excel", controller.AlarmTerminal.ExportExcel)
		AlarmTerminal.GET("/export-template", controller.AlarmTerminal.ExportTemplate)
	}

	//灯杆基本信息 控制器
	lampPole := device.Group("lamppole")
	{
		lampPole.GET("/detail", controller.LampPole.Detail)
		lampPole.GET("/getRelevanceDetail", controller.LampPole.GetRelevanceDetail)
		lampPole.GET("/list", controller.LampPole.List)
		lampPole.POST("/submit", controller.LampPole.CreateOrUpdate)
		lampPole.POST("/remove", controller.LampPole.Remove)
		lampPole.GET("/getList", controller.LampPole.GetList)
		lampPole.POST("/import-excel", controller.LampPole.ImportExcel)
		lampPole.GET("/export-excel", controller.LampPole.ExportExcel)
		lampPole.GET("/export-template", controller.LampPole.ExportTemplate)
	}

	//灯杆分组
	lampPoleGroup := device.Group("/lamppolegroup")
	{
		lampPoleGroup.GET("/detail", controller.LampPoleGroup.Detail)
		lampPoleGroup.GET("/list", controller.LampPoleGroup.List)
		lampPoleGroup.POST("/submit", controller.LampPoleGroup.CreateOrUpdate)
		lampPoleGroup.POST("/remove", controller.LampPoleGroup.Remove)
		lampPoleGroup.GET("/getList", controller.LampPoleGroup.GetList)
		lampPoleGroup.GET("/filtration-list", controller.LampPoleGroup.FiltrationList)
		lampPoleGroup.GET("/getTree", controller.LampPoleGroup.GetTree)
	}

	//灯控基本信息 控制器
	lightControl := device.Group("lightcontrol")
	{
		lightControl.GET("/detail", controller.Light.Detail)
		lightControl.GET("/list", controller.Light.List)
		lightControl.POST("/submit", controller.Light.CreateOrUpdate)
		lightControl.POST("/remove", controller.Light.Remove)
		lightControl.GET("/getLampPoleList", controller.Light.GetList)
		lightControl.POST("/import-excel", controller.Light.ImportExcel)
		lightControl.GET("/export-excel", controller.Light.ExportExcel)
		lightControl.GET("/export-template", controller.Light.ExportTemplate)
		lightControl.POST("/enable-disable", controller.Light.Enable)
		lightControl.POST("/off-one", controller.Light.Switch) //todo 在strategy中
	}

	manholeCover := device.Group("manholecover")
	{
		manholeCover.GET("/detail", controller.ManholeCover.Detail)
		manholeCover.GET("/list", controller.ManholeCover.List)
		manholeCover.POST("/submit", controller.ManholeCover.CreateOrUpdate)
		manholeCover.POST("/remove", controller.ManholeCover.Remove)
		manholeCover.POST("/setting", controller.ManholeCover.Setting)
		manholeCover.GET("/getList", controller.ManholeCover.GetList)
		manholeCover.POST("/import-excel", controller.ManholeCover.ImportExcel)
		manholeCover.GET("/export-excel", controller.ManholeCover.ExportExcel)
		manholeCover.GET("/export-template", controller.ManholeCover.ExportExcel)
		manholeCover.GET("/all-list", controller.ManholeCover.AllList)
	}

	//灯随车走分组 控制器
	onDemandGroup := device.Group("on-demand-group")
	{
		onDemandGroup.GET("/detail", controller.OnDemandGroup.Detail)
		onDemandGroup.GET("/list", controller.OnDemandGroup.List)
		onDemandGroup.POST("/submit", controller.OnDemandGroup.CreateOrUpdate)
		onDemandGroup.POST("/remove", controller.OnDemandGroup.Remove)
		onDemandGroup.GET("/getList", controller.OnDemandGroup.GetList)
		onDemandGroup.GET("/group-number", controller.OnDemandGroup.GroupNumber)
	}

	//灯随车走传感器 控制器
	onDemandSensor := device.Group("on-demand-sensor")
	{
		onDemandSensor.GET("/detail", controller.OnDemandSensor.Detail)
		onDemandSensor.GET("/list", controller.OnDemandSensor.List)
		onDemandSensor.POST("/submit", controller.OnDemandSensor.CreateOrUpdate)
		onDemandSensor.POST("/remove", controller.OnDemandSensor.Remove)
		onDemandSensor.POST("/import-excel", controller.OnDemandSensor.ImportExcel)
		onDemandSensor.GET("/export-excel", controller.OnDemandSensor.ExportExcel)
		onDemandSensor.GET("/export-template", controller.OnDemandSensor.ExportTemplate)
	}

	//环境传感器 控制器
	optoSensor := device.Group("optosensor")
	{
		optoSensor.GET("/detail", controller.OptoSensor.Detail)
		optoSensor.GET("/list", controller.OptoSensor.List)
		optoSensor.POST("/submit", controller.OptoSensor.CreateOrUpdate)
		optoSensor.POST("/remove", controller.OptoSensor.Remove)
		optoSensor.GET("/getList", controller.OptoSensor.GetList)
		optoSensor.POST("/set-default", controller.OptoSensor.SetDefault)
		optoSensor.POST("/import-excel", controller.OptoSensor.ImportExcel)
		optoSensor.GET("/export-excel", controller.OptoSensor.ExportExcel)
		optoSensor.GET("/export-template", controller.OptoSensor.ExportTemplate)
	}

	//配电箱基本信息 控制器
	switchBox := device.Group("switchbox")
	{
		switchBox.GET("/detail", controller.SwitchBox.Detail)
		switchBox.GET("/list", controller.SwitchBox.List)
		switchBox.POST("/submit", controller.SwitchBox.CreateOrUpdate)
		switchBox.POST("/remove", controller.SwitchBox.Remove)
		switchBox.GET("/getList", controller.SwitchBox.GetList)
		switchBox.POST("/import-excel", controller.SwitchBox.ImportExcel)
		switchBox.GET("/export-excel", controller.SwitchBox.ExportExcel)
		switchBox.GET("/export-template", controller.SwitchBox.ExportTemplate)
	}

	//变压器基本信息 控制器
	transformer := device.Group("transformer")
	{
		transformer.GET("/detail", controller.Transformer.Detail)
		transformer.GET("/list", controller.Transformer.List)
		transformer.POST("/submit", controller.Transformer.CreateOrUpdate)
		transformer.POST("/remove", controller.Transformer.Remove)
		transformer.GET("/getList", controller.Transformer.GetList)
	}

	//智慧网关基本信息 控制器
	wisdomGateway := device.Group("wisdomgateway")
	{
		wisdomGateway.GET("/detail", controller.WisdomGateway.Detail)
		wisdomGateway.GET("/list", controller.WisdomGateway.List)
		wisdomGateway.POST("/submit", controller.WisdomGateway.CreateOrUpdate)
		wisdomGateway.POST("/remove", controller.WisdomGateway.Remove)
		wisdomGateway.GET("/getList", controller.WisdomGateway.GetList)
		wisdomGateway.GET("/getRelevanceDetail", controller.WisdomGateway.GetRelevanceDetail)
		wisdomGateway.POST("/import-excel", controller.WisdomGateway.ImportExcel)
		wisdomGateway.GET("/export-excel", controller.WisdomGateway.ExportExcel)
		wisdomGateway.GET("/export-template", controller.WisdomGateway.ExportTemplate)
	}

	//zigBee网关 控制器
	zigbee := device.Group("zigbee")
	{
		zigbee.GET("/detail", controller.Zigbee.Detail)
		zigbee.GET("/list", controller.Zigbee.List)
		zigbee.POST("/submit", controller.Zigbee.CreateOrUpdate)
		zigbee.POST("/remove", controller.Zigbee.Remove)
		zigbee.GET("/getList", controller.Zigbee.GetList)
		zigbee.POST("/import-excel", controller.Zigbee.ImportExcel)
		zigbee.GET("/export-excel", controller.Zigbee.ExportExcel)
		zigbee.GET("/export-template", controller.Zigbee.ExportTemplate)
	}
	strategy := device.Group("/api/longchi/strategy")
	//智能照明(灯杆分组/灯控树) 控制器
	intelligentLighting := strategy.Group("IntelligentLighting")
	{
		intelligentLighting.GET("/detail", controller.IntelligentLighting.Detail)
		intelligentLighting.GET("/list", controller.IntelligentLighting.List)
		intelligentLighting.POST("/relationList", controller.IntelligentLighting.RelationList)
		intelligentLighting.POST("/relation", controller.IntelligentLighting.Relation)
		intelligentLighting.POST("/remove", controller.IntelligentLighting.Remove)
		intelligentLighting.POST("/changHandSwitch", controller.IntelligentLighting.ChangeHandSwitch)
		intelligentLighting.POST("/get_status", controller.IntelligentLighting.GetStatus)
	}
	//照明策略 控制器
	clight := strategy.Group("light")
	{
		clight.GET("/detail", controller.CLight.Detail)
		clight.GET("/list", controller.CLight.List)
		clight.POST("/submit", controller.CLight.Submit)
		clight.POST("/remove", controller.CLight.Remove)
	}
	//照明策略略关联(灯杆分组/灯控树形态) 控制器(作废)
	lightRelation := strategy.Group("lightrelation")
	{
		lightRelation.GET("/detail", controller.LightRelation.Detail)
		lightRelation.GET("/list", controller.LightRelation.List)
		lightRelation.POST("/remove", controller.LightRelation.Remove)
		lightRelation.POST("/relationList", controller.LightRelation.RelationList)
		lightRelation.POST("/relation", controller.LightRelation.Relation)
		lightRelation.POST("/changeHandSwitch", controller.LightRelation.ChangeHandSwitch)
	}
	//灯随车走照明控制 控制器
	onDemandLightingControl := strategy.Group("onDemandLightingControl")
	{
		onDemandLightingControl.GET("/detail", controller.OnDemandLightingControl.Detail)
		onDemandLightingControl.GET("/list", controller.OnDemandLightingControl.List)
		onDemandLightingControl.POST("/relation", controller.OnDemandLightingControl.Relation)
		onDemandLightingControl.POST("/changHandSwitch", controller.OnDemandLightingControl.ChangeHandSwitch)
	}

	//登录校验相关
	auth := engine.Group("/api/blade-auth")
	{
		auth.POST("/oauth/token", user.Auth.Token)
		auth.POST("/oauth/logout", user.Auth.Logout)
		auth.GET("/oauth/captcha", user.Auth.Captcha)
	}
}