# Software
# Architecture
SWT_ARCH_ARCHITECTURE = 'arch-sw'
SWT_ARCH_FUNCTIONAL_ARCHITECTURE = 'sw-if-def'
# Design
SWT_DSN_UNIT = 'sw-unit'
SWT_DSN_DETAILED_DESIGN = 'sw-dsgn'
SWT_DSN_MODEL = 'sw-mod'
# Requirement
SWT_REQ_REQUIREMENT = 'req-sw'
SWT_REQ_PARAMETER_AND_SIGNAL_DEFINITION = 'par-sig-def'
SWT_REQ_SOFT = 'sw-if-def'  # TODO

# System
# Architecture
SYS_ARCH_FUNCTIONAL = 'arch-sys-f'
SYS_ARCH_LOGICAL = 'arch-sys-l'
# Object
SYS_OBJ_CATALOG = 'obj-catalog'
SYS_OBJ_TYPE_CATALOG = 'obj-type-catalog'
# Requirement
SYS_REQ_REQUIREMENT = 'req-sys'
SYS_REQ_SPECIFICATION_SCENARIO = 'spec-scen'
SYS_REQ_ELICITED_SYSTEM = 'req-eli-sys'
# Stakeholder
SYS_SH_NEED = 'sh-need'
SYS_SH_REQUIREMENT = 'req-sh'

# Hardware
HARDWARE_ECU_REQUIREMENT = 'req-ecu'

# Software
# Architecture
SWT_ARCH_ARCHITECTURE_ALLOWED_LINKS = []
SWT_ARCH_FUNCTIONAL_ARCHITECTURE_ALLOWED_LINKS = []
# Design
SWT_DSN_UNIT_ALLOWED_LINKS = [SYS_SH_REQUIREMENT, SYS_REQ_ELICITED_SYSTEM, SYS_OBJ_TYPE_CATALOG,
                              SWT_DSN_DETAILED_DESIGN, SWT_DSN_MODEL]
SWT_DSN_DETAILED_DESIGN_ALLOWED_LINKS = [SYS_OBJ_TYPE_CATALOG, SWT_REQ_PARAMETER_AND_SIGNAL_DEFINITION,
                                         SYS_REQ_REQUIREMENT, SYS_REQ_REQUIREMENT, SWT_ARCH_FUNCTIONAL_ARCHITECTURE, SYS_SH_REQUIREMENT]
SWT_DSN_MODEL_ALLOWED_LINKS = []
# Requirement
SWT_REQ_REQUIREMENT_ALLOWED_LINKS = []
SWT_REQ_PARAMETER_AND_SIGNAL_DEFINITION_ALLOWED_LINKS = []
SWT_REQ_SOFT_ALLOWED_LINKS = []

# System
# Architecture
SYS_ARCH_FUNCTIONAL_ALLOWED_LINKS = []
SYS_ARCH_LOGICAL_ALLOWED_LINKS = []
# Object
SYS_OBJ_CATALOG_ALLOWED_LINKS = []
SYS_OBJ_TYPE_CATALOG_ALLOWED_LINKS = []
# Requirement
SYS_REQ_SPECIFICATION_SCENARIO_ALLOWED_LINKS = []
SYS_REQ_REQUIREMENT_ALLOWED_LINKS = [
    SYS_OBJ_CATALOG, SYS_OBJ_TYPE_CATALOG, SYS_SH_REQUIREMENT, HARDWARE_ECU_REQUIREMENT]
SYS_REQ_ELICITED_SYSTEM_ALLOWED_LINKS = []
# Stakeholder
SYS_SH_NEED_ALLOWED_LINKS = []
SYS_SH_REQUIREMENT_ALLOWED_LINKS = []

# Hardware
HARDWARE_ECU_REQUIREMENT_ALLOWED_LINKS = []

DIRECTIVES = {
    # Software
    # Architecture
    SWT_ARCH_ARCHITECTURE: SWT_ARCH_ARCHITECTURE_ALLOWED_LINKS,
    SWT_ARCH_FUNCTIONAL_ARCHITECTURE: SWT_ARCH_FUNCTIONAL_ARCHITECTURE_ALLOWED_LINKS,
    # Design
    SWT_DSN_UNIT: SWT_DSN_UNIT_ALLOWED_LINKS,
    SWT_DSN_DETAILED_DESIGN: SWT_DSN_DETAILED_DESIGN_ALLOWED_LINKS,
    SWT_DSN_MODEL: SWT_DSN_MODEL_ALLOWED_LINKS,
    # REQUIREMENT
    SWT_REQ_REQUIREMENT: SWT_REQ_REQUIREMENT_ALLOWED_LINKS,
    SWT_REQ_PARAMETER_AND_SIGNAL_DEFINITION: SWT_REQ_PARAMETER_AND_SIGNAL_DEFINITION_ALLOWED_LINKS,
    SWT_REQ_SOFT: SWT_REQ_SOFT_ALLOWED_LINKS,
    # System
    # Architecture
    SYS_ARCH_FUNCTIONAL: SYS_ARCH_FUNCTIONAL_ALLOWED_LINKS,
    SYS_ARCH_LOGICAL: SYS_ARCH_LOGICAL_ALLOWED_LINKS,
    # Object
    SYS_OBJ_CATALOG: SYS_OBJ_CATALOG_ALLOWED_LINKS,
    SYS_OBJ_TYPE_CATALOG: SYS_OBJ_TYPE_CATALOG_ALLOWED_LINKS,
    # Requirement
    SYS_REQ_REQUIREMENT: SYS_REQ_SPECIFICATION_SCENARIO_ALLOWED_LINKS,
    SYS_REQ_SPECIFICATION_SCENARIO: SYS_REQ_REQUIREMENT_ALLOWED_LINKS,
    SYS_REQ_ELICITED_SYSTEM: SYS_REQ_ELICITED_SYSTEM_ALLOWED_LINKS,
    # Stakeholder
    SYS_SH_NEED: SYS_SH_NEED_ALLOWED_LINKS,
    SYS_SH_REQUIREMENT: SYS_SH_REQUIREMENT_ALLOWED_LINKS,
    # Hardware
    HARDWARE_ECU_REQUIREMENT: HARDWARE_ECU_REQUIREMENT_ALLOWED_LINKS
}
