# Copyright (c) 2012-2025, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import boolean, double


class OperandOne(AWSProperty):
    """
    `OperandOne <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-operandone.html>`__
    """

    props: PropsDictType = {
        "FieldId": (str, True),
    }


class OperandTwo(AWSProperty):
    """
    `OperandTwo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-operandtwo.html>`__
    """

    props: PropsDictType = {
        "BooleanValue": (boolean, False),
        "DoubleValue": (double, False),
        "EmptyValue": (dict, False),
        "StringValue": (str, False),
    }


class BooleanOperands(AWSProperty):
    """
    `BooleanOperands <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-booleanoperands.html>`__
    """

    props: PropsDictType = {
        "OperandOne": (OperandOne, True),
        "OperandTwo": (OperandTwo, True),
        "Result": (boolean, True),
    }


class BooleanCondition(AWSProperty):
    """
    `BooleanCondition <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-booleancondition.html>`__
    """

    props: PropsDictType = {
        "EqualTo": (BooleanOperands, False),
        "NotEqualTo": (BooleanOperands, False),
    }


class HiddenCaseRule(AWSProperty):
    """
    `HiddenCaseRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-hiddencaserule.html>`__
    """

    props: PropsDictType = {
        "Conditions": ([BooleanCondition], True),
        "DefaultValue": (boolean, True),
    }


class RequiredCaseRule(AWSProperty):
    """
    `RequiredCaseRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-requiredcaserule.html>`__
    """

    props: PropsDictType = {
        "Conditions": ([BooleanCondition], True),
        "DefaultValue": (boolean, True),
    }


class CaseRuleDetails(AWSProperty):
    """
    `CaseRuleDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-caserule-caseruledetails.html>`__
    """

    props: PropsDictType = {
        "Hidden": (HiddenCaseRule, False),
        "Required": (RequiredCaseRule, False),
    }


class CaseRule(AWSObject):
    """
    `CaseRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cases-caserule.html>`__
    """

    resource_type = "AWS::Cases::CaseRule"

    props: PropsDictType = {
        "Description": (str, False),
        "DomainId": (str, False),
        "Name": (str, True),
        "Rule": (CaseRuleDetails, True),
        "Tags": (Tags, False),
    }


class Domain(AWSObject):
    """
    `Domain <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cases-domain.html>`__
    """

    resource_type = "AWS::Cases::Domain"

    props: PropsDictType = {
        "Name": (str, True),
        "Tags": (Tags, False),
    }


class Field(AWSObject):
    """
    `Field <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cases-field.html>`__
    """

    resource_type = "AWS::Cases::Field"

    props: PropsDictType = {
        "Description": (str, False),
        "DomainId": (str, False),
        "Name": (str, True),
        "Tags": (Tags, False),
        "Type": (str, True),
    }


class FieldItem(AWSProperty):
    """
    `FieldItem <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-layout-fielditem.html>`__
    """

    props: PropsDictType = {
        "Id": (str, True),
    }


class FieldGroup(AWSProperty):
    """
    `FieldGroup <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-layout-fieldgroup.html>`__
    """

    props: PropsDictType = {
        "Fields": ([FieldItem], True),
        "Name": (str, False),
    }


class Section(AWSProperty):
    """
    `Section <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-layout-section.html>`__
    """

    props: PropsDictType = {
        "FieldGroup": (FieldGroup, True),
    }


class LayoutSections(AWSProperty):
    """
    `LayoutSections <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-layout-layoutsections.html>`__
    """

    props: PropsDictType = {
        "Sections": ([Section], False),
    }


class BasicLayout(AWSProperty):
    """
    `BasicLayout <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-layout-basiclayout.html>`__
    """

    props: PropsDictType = {
        "MoreInfo": (LayoutSections, False),
        "TopPanel": (LayoutSections, False),
    }


class LayoutContent(AWSProperty):
    """
    `LayoutContent <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-layout-layoutcontent.html>`__
    """

    props: PropsDictType = {
        "Basic": (BasicLayout, True),
    }


class Layout(AWSObject):
    """
    `Layout <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cases-layout.html>`__
    """

    resource_type = "AWS::Cases::Layout"

    props: PropsDictType = {
        "Content": (LayoutContent, True),
        "DomainId": (str, False),
        "Name": (str, True),
        "Tags": (Tags, False),
    }


class LayoutConfiguration(AWSProperty):
    """
    `LayoutConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-template-layoutconfiguration.html>`__
    """

    props: PropsDictType = {
        "DefaultLayout": (str, False),
    }


class RequiredField(AWSProperty):
    """
    `RequiredField <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-template-requiredfield.html>`__
    """

    props: PropsDictType = {
        "FieldId": (str, True),
    }


class TemplateRule(AWSProperty):
    """
    `TemplateRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cases-template-templaterule.html>`__
    """

    props: PropsDictType = {
        "CaseRuleId": (str, True),
        "FieldId": (str, False),
    }


class Template(AWSObject):
    """
    `Template <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cases-template.html>`__
    """

    resource_type = "AWS::Cases::Template"

    props: PropsDictType = {
        "Description": (str, False),
        "DomainId": (str, False),
        "LayoutConfiguration": (LayoutConfiguration, False),
        "Name": (str, True),
        "RequiredFields": ([RequiredField], False),
        "Rules": ([TemplateRule], False),
        "Status": (str, False),
        "Tags": (Tags, False),
    }
