/*
 * Copyright OpenSearch Contributors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.opensearch.indexmanagement.snapshotmanagement.model

import org.opensearch.indexmanagement.indexstatemanagement.util.XCONTENT_WITHOUT_TYPE
import org.opensearch.indexmanagement.opensearchapi.parseWithType
import org.opensearch.indexmanagement.snapshotmanagement.parser
import org.opensearch.indexmanagement.snapshotmanagement.randomNotificationConfig
import org.opensearch.indexmanagement.snapshotmanagement.randomSMMetadata
import org.opensearch.indexmanagement.snapshotmanagement.randomSMPolicy
import org.opensearch.indexmanagement.snapshotmanagement.toJsonString
import org.opensearch.test.OpenSearchTestCase

class XContentTests : OpenSearchTestCase() {

    fun `test sm policy parsing`() {
        val smPolicy = randomSMPolicy(notificationConfig = randomNotificationConfig())
        val smPolicyString = smPolicy.toJsonString()
        val parsedSMPolicy = smPolicyString.parser().parseWithType(smPolicy.id, smPolicy.seqNo, smPolicy.primaryTerm, SMPolicy.Companion::parse)
        assertEquals("Round tripping sm policy with type doesn't work", smPolicy, parsedSMPolicy)
    }

    fun `test sm policy parsing without type`() {
        val smPolicy = randomSMPolicy(notificationConfig = randomNotificationConfig())
        val smPolicyString = smPolicy.toJsonString(XCONTENT_WITHOUT_TYPE)
        val parsedSMPolicy = SMPolicy.parse(smPolicyString.parser(), smPolicy.id, smPolicy.seqNo, smPolicy.primaryTerm)
        assertEquals("Round tripping sm policy without type doesn't work", smPolicy, parsedSMPolicy)
    }

    fun `test sm metadata parsing`() {
        val smMetadata = randomSMMetadata()
        val smMetadataString = smMetadata.toJsonString()
        val parsedSMMetadata = smMetadataString.parser().parseWithType(parse = SMMetadata.Companion::parse)
        assertEquals("Round tripping sm metadata doesn't work", smMetadata, parsedSMMetadata)
    }

    // TODO SM test object to json string matches expected
}