# coding: utf-8
# Copyright (c) 2016, 2026, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20260129

from __future__ import print_function
import click
import oci  # noqa: F401
import six  # noqa: F401
import sys  # noqa: F401
from oci_cli import cli_constants  # noqa: F401
from oci_cli import cli_util
from oci_cli import json_skeleton_utils
from oci_cli import custom_types  # noqa: F401
from oci_cli.aliasing import CommandGroupWithAlias
from services.self.src.oci_cli_self.generated import self_service_cli


@click.command(cli_util.override('partner_integeration.partner_integeration_root_group.command_name', 'partner-integeration'), cls=CommandGroupWithAlias, help=cli_util.override('partner_integeration.partner_integeration_root_group.help', """Use the SELF Service API to manage Subscriptions in Oracle Cloud Infrastructure Marketplace. For more information, see [Overview of Marketplace]"""), short_help=cli_util.override('partner_integeration.partner_integeration_root_group.short_help', """SELF Service API"""))
@cli_util.help_option_group
def partner_integeration_root_group():
    pass


@click.command(cli_util.override('partner_integeration.partner_subscription_group.command_name', 'partner-subscription'), cls=CommandGroupWithAlias, help="""These api for partner to communicate to OCI.""")
@cli_util.help_option_group
def partner_subscription_group():
    pass


@click.command(cli_util.override('partner_integeration.listing_subscriptions_collection_group.command_name', 'listing-subscriptions-collection'), cls=CommandGroupWithAlias, help="""Results of a subscription search. Contains both SubscriptionSummary items and other information, such as metadata.""")
@cli_util.help_option_group
def listing_subscriptions_collection_group():
    pass


self_service_cli.self_service_group.add_command(partner_integeration_root_group)
partner_integeration_root_group.add_command(partner_subscription_group)
partner_integeration_root_group.add_command(listing_subscriptions_collection_group)


@partner_subscription_group.command(name=cli_util.override('partner_integeration.activate_subscription.command_name', 'activate-subscription'), help=u"""Activates a subscription identified by the provided subscription ID and updates its status. \n[Command Reference](activateSubscription)""")
@cli_util.option('--subscription-id', required=True, help=u"""The unique identifier for the subscription.""")
@cli_util.option('--product-id', required=True, help=u"""The unique identifier of the marketplace product listing.""")
@cli_util.option('--freeform-tags', type=custom_types.CLI_COMPLEX_TYPE, help=u"""Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags].

Example: `{\"Department\": \"Finance\"}`""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@cli_util.option('--defined-tags', type=custom_types.CLI_COMPLEX_TYPE, help=u"""Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags].

Example: `{\"Operations\": {\"CostCenter\": \"42\"}}`""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@cli_util.option('--if-match', help=u"""For optimistic concurrency control. In the PUT or DELETE call for a resource, set the `if-match` parameter to the value of the etag from a previous GET or POST response for that resource. The resource will be updated or deleted only if the etag you provide matches the resource's current etag value.""")
@json_skeleton_utils.get_cli_json_input_option({'freeform-tags': {'module': 'self', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'self', 'class': 'dict(str, dict(str, object))'}})
@cli_util.help_option
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'freeform-tags': {'module': 'self', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'self', 'class': 'dict(str, dict(str, object))'}}, output_type={'module': 'self', 'class': 'ActivateSubscriptionResult'})
@cli_util.wrap_exceptions
def activate_subscription(ctx, from_json, subscription_id, product_id, freeform_tags, defined_tags, if_match):

    if isinstance(subscription_id, six.string_types) and len(subscription_id.strip()) == 0:
        raise click.UsageError('Parameter --subscription-id cannot be whitespace or empty string')

    kwargs = {}
    if if_match is not None:
        kwargs['if_match'] = if_match
    kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])

    _details = {}
    _details['productId'] = product_id

    if freeform_tags is not None:
        _details['freeformTags'] = cli_util.parse_json_parameter("freeform_tags", freeform_tags)

    if defined_tags is not None:
        _details['definedTags'] = cli_util.parse_json_parameter("defined_tags", defined_tags)

    client = cli_util.build_client('self', 'partner_integeration', ctx)
    result = client.activate_subscription(
        subscription_id=subscription_id,
        activate_subscription_details=_details,
        **kwargs
    )
    cli_util.render_response(result, ctx)


@listing_subscriptions_collection_group.command(name=cli_util.override('partner_integeration.listing_subscriptions.command_name', 'listing-subscriptions'), help=u"""Gets information about a Subscription. \n[Command Reference](listingSubscriptions)""")
@cli_util.option('--listing-id', required=True, help=u"""The unique identifier for the listing.""")
@cli_util.option('--display-name', help=u"""A filter to return only resources that match the given name.""")
@cli_util.option('--sort-by', type=custom_types.CliCaseInsensitiveChoice(["timeCreated", "displayName", "selfTokenId", "productId"]), help=u"""The field to sort by. Only one sort order may be provided.""")
@cli_util.option('--sort-order', type=custom_types.CliCaseInsensitiveChoice(["ASC", "DESC"]), help=u"""The sort order to use, either ascending (`ASC`) or descending (`DESC`).""")
@cli_util.option('--limit', type=click.INT, help=u"""For list pagination. The maximum number of results per page, or items to return in a paginated \"List\" call. For important details about how pagination works, see [List Pagination].""")
@cli_util.option('--page', help=u"""For list pagination. The value of the opc-next-page response header from the previous \"List\" call. For important details about how pagination works, see [List Pagination].""")
@json_skeleton_utils.get_cli_json_input_option({})
@cli_util.help_option
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={}, output_type={'module': 'self', 'class': 'ListingSubscriptionsCollection'})
@cli_util.wrap_exceptions
def listing_subscriptions(ctx, from_json, listing_id, display_name, sort_by, sort_order, limit, page):

    kwargs = {}
    if display_name is not None:
        kwargs['display_name'] = display_name
    if sort_by is not None:
        kwargs['sort_by'] = sort_by
    if sort_order is not None:
        kwargs['sort_order'] = sort_order
    if limit is not None:
        kwargs['limit'] = limit
    if page is not None:
        kwargs['page'] = page
    kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
    client = cli_util.build_client('self', 'partner_integeration', ctx)
    result = client.listing_subscriptions(
        listing_id=listing_id,
        **kwargs
    )
    cli_util.render_response(result, ctx)


@partner_subscription_group.command(name=cli_util.override('partner_integeration.resolve_subscription.command_name', 'resolve-subscription'), help=u"""This API returns the subscription details by resolving JWT token to corresponding subscription and move its state to Pending Activation state. \n[Command Reference](resolveSubscription)""")
@cli_util.option('--self-token', required=True, help=u"""The base 64 encoded JWT token which is mapped to a particular subscription""")
@cli_util.option('--product-id', required=True, help=u"""The [OCID] of the marketplace product listing.""")
@cli_util.option('--freeform-tags', type=custom_types.CLI_COMPLEX_TYPE, help=u"""Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags].

Example: `{\"Department\": \"Finance\"}`""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@cli_util.option('--defined-tags', type=custom_types.CLI_COMPLEX_TYPE, help=u"""Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags].

Example: `{\"Operations\": {\"CostCenter\": \"42\"}}`""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@cli_util.option('--if-match', help=u"""For optimistic concurrency control. In the PUT or DELETE call for a resource, set the `if-match` parameter to the value of the etag from a previous GET or POST response for that resource. The resource will be updated or deleted only if the etag you provide matches the resource's current etag value.""")
@json_skeleton_utils.get_cli_json_input_option({'freeform-tags': {'module': 'self', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'self', 'class': 'dict(str, dict(str, object))'}})
@cli_util.help_option
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'freeform-tags': {'module': 'self', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'self', 'class': 'dict(str, dict(str, object))'}}, output_type={'module': 'self', 'class': 'PartnerSubscription'})
@cli_util.wrap_exceptions
def resolve_subscription(ctx, from_json, self_token, product_id, freeform_tags, defined_tags, if_match):

    kwargs = {}
    if if_match is not None:
        kwargs['if_match'] = if_match
    kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])

    _details = {}
    _details['selfToken'] = self_token
    _details['productId'] = product_id

    if freeform_tags is not None:
        _details['freeformTags'] = cli_util.parse_json_parameter("freeform_tags", freeform_tags)

    if defined_tags is not None:
        _details['definedTags'] = cli_util.parse_json_parameter("defined_tags", defined_tags)

    client = cli_util.build_client('self', 'partner_integeration', ctx)
    result = client.resolve_subscription(
        resolve_subscription_details=_details,
        **kwargs
    )
    cli_util.render_response(result, ctx)
