// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2025, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.

package types

import (
	"encoding/json"
	"strconv"
)

type DataResponse struct {
	Data any `json:"data"`
}

func Wrap(data any) DataResponse {
	return DataResponse{
		Data: data,
	}
}

type VersionData struct {
	Version string `json:"version"`
}

type SyncingData struct {
	HeadSlot     int64 `json:"head_slot"`
	SyncDistance int64 `json:"sync_distance"`
	IsSyncing    bool  `json:"is_syncing"`
	IsOptimistic bool  `json:"is_optimistic"`
	ELOffline    bool  `json:"el_offline"`
}

type syncingJSON struct {
	HeadSlot     string `json:"head_slot"`
	SyncDistance string `json:"sync_distance"`
	IsSyncing    bool   `json:"is_syncing"`
	IsOptimistic bool   `json:"is_optimistic"`
	ELOffline    bool   `json:"el_offline"`
}

func (s *SyncingData) MarshalJSON() ([]byte, error) {
	return json.Marshal(syncingJSON{
		HeadSlot:     strconv.FormatInt(s.HeadSlot, 10),
		SyncDistance: strconv.FormatInt(s.SyncDistance, 10),
		IsSyncing:    s.IsSyncing,
		IsOptimistic: s.IsOptimistic,
		ELOffline:    s.ELOffline,
	})
}
