type Mutation {

    """
    Creates a single host in Zabbix.
    
    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    createHost(
        """Hostname of the new host."""
        host: String!, 
        """List of host group IDs to assign the host to."""
        hostgroupids:[Int!]!, 
        """List of template IDs to link to the host."""
        templateids: [Int],
        """List of template names to link to the host."""
        templateNames: [String],
        """Optional location information for the host inventory."""
        location: LocationInput
    ): CreateHostResponse

    """
    (Mass) Import Zabbix host groups and assign them to the corresponding hosts by groupid or groupName.

    Return value: If no error occurs, a groupid is returned for each created group; otherwise, the return object contains an error message.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    importHostGroups(
        """List of host groups to import."""
        hostGroups: [CreateHostGroup!]!
    ):[CreateHostGroupResponse!]


    """
    (Mass) Import hosts and assign them to host groups by groupid or groupName.

    Return value: If no error occurs, a hostid is returned for each created host; otherwise, the return object contains an error message.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    importHosts(
        """List of hosts to import."""
        hosts: [CreateHost!]!
    ):[ImportHostResponse!]

    """
    Import user rights (roles and groups) into Zabbix.
    
    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    importUserRights(
        """User rights configuration to import."""
        input: UserRightsInput!, 
        """If true, only validates the input without applying changes."""
        dryRun: Boolean! = true
    ): ImportUserRightsResult

    """
    (Mass) Import template groups and assign them by groupid or name.

    Return value: If no error occurs, a groupid is returned for each created group; otherwise, the return object contains an error message.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    importTemplateGroups(
        """List of template groups to import."""
        templateGroups: [CreateTemplateGroup!]!
    ):[CreateTemplateGroupResponse!]

    """
    (Mass) Import templates.

    Return value: If no error occurs, a templateid is returned for each created template; otherwise, the return object contains an error message.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    importTemplates(
        """List of templates to import."""
        templates: [CreateTemplate!]!
    ):[ImportTemplateResponse!]

    """
    Delete templates by their IDs or by a name pattern.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    deleteTemplates(
        """List of template IDs to delete."""
        templateids: [Int!], 
        """Wildcard name pattern for templates to delete (e.g. 'Template%')."""
        name_pattern: String
    ): [DeleteResponse!]

    """
    Delete template groups by their IDs or by a name pattern.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    deleteTemplateGroups(
        """List of template group IDs to delete."""
        groupids: [Int!], 
        """Wildcard name pattern for template groups to delete."""
        name_pattern: String
    ): [DeleteResponse!]

    """
    Delete hosts by their IDs or by a name pattern.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    deleteHosts(
        """List of host IDs to delete."""
        hostids: [Int!], 
        """Wildcard name pattern for hosts to delete."""
        name_pattern: String
    ): [DeleteResponse!]

    """
    Delete host groups by their IDs or by a name pattern.

    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    deleteHostGroups(
        """List of host group IDs to delete."""
        groupids: [Int!], 
        """Wildcard name pattern for host groups to delete."""
        name_pattern: String
    ): [DeleteResponse!]

    """
    Pushes history data to Zabbix (ZABBIX_TRAP items).
    
    Authentication: Requires `zbx_session` cookie or `zabbix-auth-token` header.
    """
    pushHistory(
        """Item ID to push data to."""
        itemid: Int,
        """Item key to push data to (required if itemid is empty)."""
        key: String,
        """Host name the item belongs to (required if itemid is empty)."""
        host: String,
        """Values to push."""
        values: [HistoryPushInput!]!
    ): HistoryPushResponse

    """
    Runs a smoketest: creates a template, links a host, verifies it, and cleans up.
    """
    runSmoketest(
        """Technical name for the smoketest host."""
        hostName: String!, 
        """Technical name for the smoketest template."""
        templateName: String!, 
        """Technical name for the smoketest host group."""
        groupName: String!
    ): SmoketestResponse!

    """
    Runs all regression tests.
    """
    runAllRegressionTests: SmoketestResponse!
}

"""
Response object for the smoketest operation.
"""
type SmoketestResponse {
    """
    True if all steps of the smoketest succeeded.
    """
    success: Boolean!
    """
    Overall status message.
    """
    message: String
    """
    Detailed results for each step.
    """
    steps: [SmoketestStep!]!
}

"""
Results for a single step in the smoketest.
"""
type SmoketestStep {
    """
    Name of the step (e.g. 'Create Template').
    """
    name: String!
    """
    True if the step succeeded.
    """
    success: Boolean!
    """
    Status message or error message for the step.
    """
    message: String
}

####################################################################
# Input types used for importXXX - and storeXXX - Mutations
####################################################################

"""
Response object for delete operations.
"""
type DeleteResponse {
    """
    ID of the deleted entity.
    """
    id: Int!
    """
    Status message for the delete operation.
    """
    message: String
    """
    Error information if the deletion failed.
    """
    error: ApiError
}

"""
Input for creating or identifying a template group.
"""
input CreateTemplateGroup {
    """
    Name of the template group.
    """
    groupName: String!
    """
    Internally used unique id (will be assigned by Zabbix if empty).
    """
    uuid: String
}

"""
Input for creating or updating a template.
"""
input CreateTemplate {
    """
    Technical name of the template.
    """
    host: String!
    """
    Visible name of the template.
    """
    name: String
    """
    List of template group names to assign the template to.
    """
    groupNames: [String!]!
    """
    Optionally, internal group IDs can be provided instead of group names.
    """
    groupids: [Int]
    """
    Internally used unique id (will be assigned by Zabbix if empty).
    """
    uuid: String
    """
    List of items to create within the template.
    """
    items: [CreateTemplateItem!]
    """
    List of other templates to link to this template.
    """
    templates: [CreateLinkedTemplate!]
    """
    Tags to assign to the template.
    """
    tags: [CreateTag!]
    """
    User macros to assign to the template.
    """
    macros: [CreateMacro!]
}

"""
Input for creating an item within a template.
"""
input CreateTemplateItem {
    """
    Internally used unique id.
    """
    uuid: String
    """
    Name of the item.
    """
    name: String!
    """
    Zabbix item type (e.g. 0 for Zabbix Agent, 18 for Dependent).
    """
    type: Int
    """
    Zabbix item status (0 for Enabled, 1 for Disabled).
    """
    status: Int
    """
    Technical key of the item.
    """
    key: String!
    """
    Type of information (e.g. 0 for Float, 3 for Int, 4 for Text).
    """
    value_type: Int
    """
    History storage period (e.g. '2d', '90d').
    """
    history: String
    """
    Units of the value.
    """
    units: String
    """
    Update interval.
    """
    delay: String
    """
    Description of the item.
    """
    description: String
    """
    URL for HTTP Agent items.
    """
    url: String
    """
    JavaScript code for Script items or other parameters.
    """
    params: String
    """
    Timeout for item data collection.
    """
    timeout: String
    """
    Preprocessing steps for the item values.
    """
    preprocessing: [CreateItemPreprocessing!]
    """
    Tags to assign to the item.
    """
    tags: [CreateTag!]
    """
    Reference to a master item if this is a dependent item.
    """
    master_item: CreateMasterItem
}

"""
Reference to a master item for dependent items.
"""
input CreateMasterItem {
    """
    The technical key of the master item.
    """
    key: String!
}

"""
Input for an item preprocessing step.
"""
input CreateItemPreprocessing {
    """
    Type of preprocessing step (e.g. 12 for JSONPath, 21 for JavaScript).
    """
    type: Int!
    """
    Parameters for the preprocessing step.
    """
    params: [String!]!
    """
    Error handling behavior.
    """
    error_handler: Int
    """
    Error handling parameters.
    """
    error_handler_params: String
}

"""
Reference to a template to be linked.
"""
input CreateLinkedTemplate {
    """
    The technical name of the template to link.
    """
    name: String!
}

"""
Input for a tag.
"""
input CreateTag {
    """
    Tag name.
    """
    tag: String!
    """
    Tag value.
    """
    value: String
}

"""
Input for creating a user macro.
"""
input CreateMacro {
    """
    Macro name (e.g. '{$LAT}').
    """
    macro: String!
    """
    Macro value.
    """
    value: String!
}

"""
Response for a template import operation.
"""
type ImportTemplateResponse {
    """
    The technical name of the imported template.
    """
    host: String!
    """
    The Zabbix template ID assigned to the template.
    """
    templateid: String
    """
    Status message for the import.
    """
    message: String
    """
    Error information if the import failed.
    """
    error: ApiError
}

"""
Response for a template group import operation.
"""
type CreateTemplateGroupResponse {
    """
    Name of the imported template group.
    """
    groupName: String!
    """
    The Zabbix group ID assigned to the group.
    """
    groupid: Int
    """
    Status message for the import.
    """
    message: String
    """
    Error information if the import failed.
    """
    error: ApiError
}

"""
Input for creating or identifying a host group.
"""
input CreateHostGroup {
    """
    Name of the host group.
    """
    groupName: String!
    """
    Internally used unique id (will be assigned by Zabbix if empty).
    """
    uuid: String
}

"""
Response for a host import operation.
"""
type ImportHostResponse {
    """
    The device key (technical name) of the imported host.
    """
    deviceKey: String!
    """
    The Zabbix host ID assigned to the host.
    """
    hostid: String
    """
    Status message for the import.
    """
    message: String
    """
    Error information if the import failed.
    """
    error: ApiError
}

"""
Response for a host group import operation.
"""
type CreateHostGroupResponse {
    """
    Name of the imported host group.
    """
    groupName: String!
    """
    The Zabbix group ID assigned to the group.
    """
    groupid: Int
    """
    Status message for the import.
    """
    message: String
    """
    Error information if the import failed.
    """
    error: ApiError
}

"""
Input for creating a new host.
"""
input CreateHost {
    """
    Technical name of the host/device.
    """
    deviceKey: String!
    """
    Optional display name of the device (must be unique if provided - default is to set display name to deviceKey).
    """
    name: String
    """
    Classification or category of the device.
    """
    deviceType: String!
    """
    List of host group names to assign the host to.
    """
    groupNames: [String!]!
    """
    Optionally, internal group IDs can be provided instead of group names.
    """
    groupids: [Int]
    """
    List of template IDs to link to the host.
    """
    templateids: [Int]
    """
    List of template names to link to the host.
    """
    templateNames: [String]
    """
    Location information for the host.
    """
    location: LocationInput
    """
    User macros to assign to the host.
    """
    macros: [CreateMacro!]
}

"""
Response for a single host creation operation.
"""
type CreateHostResponse {
    """
    List of created host IDs.
    """
    hostids: [Int]
    """
    List of created item IDs.
    """
    itemids: [Int]
    """
    Error information if the creation failed.
    """
    error: ApiError
}

"""
Input for host location information.
"""
input LocationInput {
    """
    Name of the location.
    """
    name: String
    """
    Latitude coordinate.
    """
    location_lat: String
    """
    Longitude coordinate.
    """
    location_lon: String
}

"""
Input for importing user rights.
"""
input UserRightsInput {
    """
    List of user roles to import.
    """
    userRoles: [UserRoleInput!]
    """
    List of user groups to import.
    """
    userGroups: [UserGroupInput!]
}

"""
Input for a user role.
"""
input UserRoleInput {
    """
    Name of the role.
    """
    name: String
    """
    Type of role (e.g. 1 for User, 2 for Admin, 3 for Super Admin).
    """
    type: Int
    """
    Whether the role is read-only (1) or not (0).
    """
    readonly: Int
    """
    Specific rules for the role.
    """
    rules: UserRoleRulesInput
}

"""
Input for user role rules.
"""
input UserRoleRulesInput {
    """
    UI access rules.
    """
    ui: [UserRoleRuleInput!]
    """
    Default access for UI elements.
    """
    ui_default_access: Int
    """
    Module access rules.
    """
    modules:[UserRoleModuleInput!]
    """
    Default access for modules.
    """
    modules_default_access: Int
    """
    Whether API access is enabled (1) or not (0).
    """
    api_access: Int
    """
    API mode (e.g. 0 for white-list, 1 for black-list).
    """
    api_mode: Int
    """
    List of API methods allowed/denied.
    """
    api: [String!]
    """
    Action rules.
    """
    actions: [UserRoleRuleInput!]
    """
    Default access for actions.
    """
    actions_default_access: Int
}

"""
Input for a single user role rule.
"""
input UserRoleRuleInput {
    """
    Name of the rule/element.
    """
    name: String
    """
    Status (e.g. 1 for enabled, 0 for disabled).
    """
    status: Int
}

"""
Input for user role module access.
"""
input UserRoleModuleInput {
    """
    The internal Zabbix module ID.
    """
    moduleid: String
    """
    Status of the module.
    """
    status: Int
    """
    Technical ID of the module.
    """
    id: String
}

"""
Input for a user group.
"""
input UserGroupInput {
    """
    Name of the user group.
    """
    name: String!
    """
    Frontend access level.
    """
    gui_access: Int
    """
    Status of the users in the group.
    """
    users_status: Int
    """
    Permissions for host groups.
    """
    hostgroup_rights: [ZabbixGroupRightInput!]
    """
    Permissions for template groups.
    """
    templategroup_rights: [ZabbixGroupRightInput!]
}

"""
Input for a Zabbix group permission right.
"""
input ZabbixGroupRightInput {
    """
    The unique ID of the group.
    """
    uuid: String
    """
    Name may optionally be specified for documentation purpose,
    but the master for setting the user right is the uuid.
    """
    name: String
    """
    The permission level to assign.
    """
    permission: Permission
}

"""
Result of a user rights import operation.
"""
type ImportUserRightsResult {
    """
    Results for the imported user roles.
    """
    userRoles: [ImportUserRightResult!]
    """
    Results for the imported user groups.
    """
    userGroups: [ImportUserRightResult!]
}

"""
Result of a single user right (role or group) import.
"""
type ImportUserRightResult {
    """
    The ID of the imported/updated entity.
    """
    id: String
    """
    The name of the entity.
    """
    name: String
    """
    Status message for the import.
    """
    message: String
    """
    List of errors encountered during import.
    """
    errors: [ApiError!]
}

"""
Input for pushing history data.
"""
input HistoryPushInput {
    """Timestamp of the value."""
    timestamp: DateTime!
    """The value to push (JSON object)."""
    value: JSONObject!
}

"""
Response object for pushHistory operation.
"""
type HistoryPushResponse {
    """Overall status message."""
    message: String
    """Error information if the operation failed."""
    error: ApiError
    """Detailed results for each pushed value."""
    data: [HistoryPushData!]
}

"""
Detailed result for a single pushed value.
"""
type HistoryPushData {
    """The Zabbix item ID."""
    itemid: String
    """Error information if the push failed for this item."""
    error: ApiError
}

