# Info: AWS provider dependencies for batch provisioning workflows (Provisioning)
# Author: Claude Code Agent 7
# Release: 2.0.0
# Date: 2025-09-25
import provisioning

schema NetworkDependencies:
    """VPC and networking dependencies"""
    vpc_first: bool = True
    subnets_require_vpc: bool = True
    igw_for_public: bool = True
    route_tables_auto: bool = True
    nacls_after_subnets: bool = True
    network_timeout: int = 10

schema SecurityDependencies:
    """Security Group dependencies"""
    requires_vpc: bool = True
    cross_references: bool = True
    batch_size: int = 20
    max_rules_per_group: int = 60

schema InstanceDependencies:
    """EC2 instance dependencies"""
    requires: [str] = ["subnets", "security_groups", "key_pairs"]
    launch_template_support: bool = True
    batch_size: int = 10
    max_concurrent_per_az: int = 20
    launch_timeout: int = 10
    placement_groups: bool = True

schema VolumeDependencies:
    """EBS volume dependencies"""
    independent_creation: bool = True
    attach_requires_running: bool = False
    concurrent_snapshots: bool = True
    batch_size: int = 15
    single_az_restriction: bool = True

schema ApiLimits:
    """API rate limits and constraints"""
    ec2_requests_per_second: int = 20
    vpc_requests_per_second: int = 10
    ebs_requests_per_second: int = 10
    burst_multiplier: float = 2
    throttle_backoff: int = 1000
    max_retries: int = 5
    regional_limits: bool = True

schema SharedResources:
    """Shared resources across accounts/regions"""
    amis_shareable: bool = True
    snapshots_shareable: bool = True
    keypairs_regional: bool = True
    vpcs_isolated: bool = True
    sgs_vpc_scoped: bool = True

schema Lifecycle:
    """Resource lifecycle management"""
    safe_delete: [str] = ["instances", "volumes", "snapshots"]
    dependency_check: [str] = ["vpc", "subnets", "security_groups"]
    cost_monitoring: [str] = ["instances", "volumes", "nat_gateways", "load_balancers"]
    cleanup_order: [str] = ["load_balancers", "volumes", "instances", "key_pairs", "security_groups", "internet_gateways", "subnets", "vpc"]

schema CrossProvider:
    """Cross-provider compatibility"""
    upcloud_compatible: bool = True
    local_compatible: bool = True
    hybrid_deployments: bool = True
    naming_restrictions: [str] = ["aws-", "amazon-"]
    mandatory_tags: [str] = ["Project", "Environment", "ManagedBy"]

schema AvailabilityZones:
    """Availability Zone considerations"""
    multi_az_distribution: bool = True
    min_az_count: int = 2
    max_az_count: int = 3
    affinity_groups: bool = True

schema Validation:
    """Validation and compliance"""
    quota_validation: bool = True
    permission_validation: bool = True
    regional_limits: bool = True
    compliance_checks: bool = True
    cost_estimation: bool = True

schema AWSDependencies:
    """
    AWS provider dependency management for batch workflows
    """
    # Resource creation order and dependencies
    resource_order: [str] = ["vpc", "subnets", "internet_gateways", "security_groups", "key_pairs", "instances", "volumes", "load_balancers"]

    # Configuration sections
    network_dependencies: NetworkDependencies = NetworkDependencies {}
    security_dependencies: SecurityDependencies = SecurityDependencies {}
    instance_dependencies: InstanceDependencies = InstanceDependencies {}
    volume_dependencies: VolumeDependencies = VolumeDependencies {}
    api_limits: ApiLimits = ApiLimits {}
    shared_resources: SharedResources = SharedResources {}
    lifecycle: Lifecycle = Lifecycle {}
    cross_provider: CrossProvider = CrossProvider {}
    availability_zones: AvailabilityZones = AvailabilityZones {}
    validation: Validation = Validation {}

# Default dependency configuration for AWS provider
aws_dependencies: AWSDependencies = AWSDependencies {}
