StaffApply:
  post:
    tags:
      - applications
    summary: Submit a Staff appeal
    description: Submit an staff application
    operationId: submitStaffApplication
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StaffApplication'
    responses:
      '201':
        description: Application created please verify email
        content:
          application/json:
            schema:
              $ref: '../../generic/components.yml#/components/schemas/FormResponse'
      default:
        description: Unexpected error
        content:
          application/json:
            schema:
              $ref: '../../generic/errors.yml#/components/schemas/ApiError'
StaffApplicationsIsOpen:
  get:
    tags:
      - applications
    summary: Get if staff applications are open
    description: Get if staff applications are open
    operationId: getStaffApplicationsIsOpen
    responses:
      '200':
        description: If staff applications are open
        content:
          application/json:
            schema:
              type: boolean
      '403':
        description: If staff applications are not open
      default:
        description: Unexpected error
        content:
          application/json:
            schema:
              $ref: '../../generic/errors.yml#/components/schemas/ApiError'
components:
  schemas:
    StaffApplication:
      type: object
      description: Schema for staff application
      required:
        - email
        - age
        - discordUsername
        - meetsRequirements
        - pronouns
        - joinDate
        - weeklyPlaytime
        - availableDays
        - availableTimes
        - previousExperience
        - pluginExperience
        - moderatorExpectations
        - additionalInfo
      properties:
        email:
          type: string
          format: email
          maxLength: 320
          description: Email address of the applicant
        age:
          type: integer
          minimum: 13
          description: Age of the applicant, must be 13 or older
        discordUsername:
          type: string
          maxLength: 32
          description: Discord username of the applicant
        meetsRequirements:
          type: boolean
          description: Confirmation that the applicant meets all requirements
        pronouns:
          type: string
          maxLength: 32
          description: Preferred pronouns of the applicant
        joinDate:
          type: string
          format: date
          description: Date when the applicant joined the service
        weeklyPlaytime:
          type: integer
          minimum: 1
          description: Average weekly playtime in hours
        availableDays:
          type: array
          items:
            type: string
            maxLength: 256
          description: Days of the week when the applicant is available
        availableTimes:
          type: string
          maxLength: 1000
          description: Time ranges when the applicant is available
        previousExperience:
          type: string
          minLength: 10
          maxLength: 4000
          description: Description of previous relevant experience
        pluginExperience:
          type: string
          minLength: 10
          maxLength: 4000
          description: Description of experience with plugins
        moderatorExpectations:
          type: string
          minLength: 10
          maxLength: 4000
          description: Applicant's expectations and understanding of moderator responsibilities
        additionalInfo:
          type: string
          maxLength: 4000
          description: Any additional information the applicant wishes to provide
