components:
  schemas:

    RegisterTeacher:
      type: object
      required:
        - full_name
        - cpfCnpj
        - email
        - password
        - telephone
        - birth_date

      properties:

        full_name:
          type: string
          description: Teacher's full name
          example: "João Lima Santos"

        birth_date:
          type: string
          format: date-time
          description: Teacher's birth date in ISO 8601 format
          example: "1985-05-20T00:00:00.000Z"

        cpfCnpj:
          type: object
          required:
            - value

          properties:
            type:
              type: string
              enum: [CPF, CNPJ]
              description: CPF or CNPJ
              example: CPF

            value:
              type: string
              description: Teacher's CPF number
              example: "123.456.789-00"

            upload_id:
              type: string
              description: ID of the uploaded CPF document
              example: "doc_12345"

        rg:
          type: object
          required:
            - value

          properties:
            value:
              type: string
              description: Teacher's RG document number
              example: "12.345.678-9"

            upload_id:
              type: string
              description: ID of the uploaded RG document
              example: "doc_12346"

        telephone:
          type: string
          description: Contact telephone number
          example: "11999999999"

        email:
          type: string
          description: Teacher's email
          format: email
          example: "joao.lima@email.com"

        password:
          type: string
          description: Teacher's password
          format: password
          example: "P@ssword123!"

        image_profile:
          type: string
          description: Teacher's profile image

        address:
          type: object
          required:
            - street
            - number
            - city
            - state
            - zip_code
          description: Teacher's address information

          properties:
            street:
              type: string
              description: Street name
              example: "Rua das Flores"

            number:
              type: string
              description: Address number
              example: "123"

            complement:
              type: string
              description: Address complement
              example: "Apto 45"

            city:
              type: string
              description: City name
              example: "São Paulo"

            state:
              type: string
              description: State abbreviation
              example: "SP"

            zip_code:
              type: string
              description: ZIP code
              example: "01234-567"

        education:
          type: object
          required:
            - level
            - field
            - teaching_experience
            - disciplines
            - education_levels
          description: Teacher's educational background and qualifications

          properties:
            level:
              type: string
              description: Highest education level
              example: "Master's Degree"

            field:
              type: string
              description: Field of study
              example: "Mathematics"

            teaching_experience:
              type: string
              description: Teaching experience description
              example: "5 years teaching high school mathematics"

            disciplines:
              type: array
              items:
                type: string
              description: Subjects teacher can teach
              example: ["Mathematics", "Physics", "Calculus"]

            education_levels:
              type: array
              items:
                type: string
              description: Education levels teacher can teach
              example: ["High School", "University", "Preparatory Courses"]

        avaliability:
          type: object
          required:
            - modalities
            - in_person_location
            - avaliable_times
            - accepts_emergency_classes
          description: Teacher's availability for classes

          properties:
            modalities:
              type: array
              items:
                type: string
                enum: [online, presencial, hibrida]
              description: Available teaching modalities
              example: ["online", "presencial"]

            in_person_location:
              type: array
              items:
                type: string
              description: Available locations for in-person classes
              example: ["São Paulo - Centro", "São Paulo - Zona Sul"]

            avaliable_times:
              type: array
              description: Available time slots for classes
              items:

                type: object
                properties:
                  day_of_week:
                    type: number
                    description: "Number of day of week. 0: Sunday, 1: Monday..."
                    example: 0

                  start_time:
                    type: number
                    description: "Start time (H * 60). 8:30 = 510"
                    example: 510

                  end_time:
                    type: number
                    description: "End time (H * 60). 12:00 = 720"
                    example: 720

            accepts_emergency_classes:
              type: boolean
              description: Whether teacher accepts emergency/short-notice classes
              example: true

        payment:
          type: object
          required:
            - hourly_rate
            - payment_info
          description: Payment information and preferences

          properties:
            hourly_rate:
              type: number
              format: float
              description: Teacher's hourly rate
              example: 85.50

            payment_info:
              type: object

              properties:
                type:
                  type: string
                  description: Payment method type
                  example: "pix"

                key:
                  type: string
                  description: Payment key (PIX, bank account, etc.)
                  example: "123.456.789-00"

        preferences:
          type: object
          description: Teacher's preferences and additional information

          properties:
            student_type_preference:
              type: string
              description: Preferred student type
              example: "High school students preparing for university exams"

            general_observations:
              type: string
              description: General observations and additional information
              example: "Specialized in calculus and advanced mathematics"