# Construct OpenAPI YAML as a string for UserService and GameService

openapi_yaml = """
openapi: 3.0.0
info:
  title: Match Made API
  version: 1.0.0
paths:
  /users:
    post:
      summary: Create a new user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '201':
          description: User created
    get:
      summary: Search for players
      parameters:
        - in: query
          name: skillTags
          schema: { type: string }
        - in: query
          name: radius
          schema: { type: number }
        - in: query
          name: lat
          schema: { type: number }
        - in: query
          name: lng
          schema: { type: number }
      responses:
        '200':
          description: List of users
  /users/{id}:
    get:
      summary: Fetch user by ID
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '200':
          description: User data
    put:
      summary: Update user
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '200':
          description: User updated

  /games:
    post:
      summary: Organizer creates a new game
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Game'
      responses:
        '201':
          description: Game created
    get:
      summary: List all games
      responses:
        '200':
          description: List of games

  /games/{id}:
    get:
      summary: Fetch game details
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Game details
    patch:
      summary: Organizer updates a game
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Game'
      responses:
        '200':
          description: Game updated
    delete:
      summary: Organizer cancels a game
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '204':
          description: Game deleted

  /games/{id}/invite:
    post:
      summary: Organizer invites a player
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  type: string
      responses:
        '200':
          description: Invitation sent

  /games/{id}/join:
    post:
      summary: Player joins a game
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Joined game

  /games/{id}/respond:
    post:
      summary: Player responds to invitation
      parameters:
        - in: path
          name: id
          required: true
          schema: { type: string }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum: [confirmed, declined]
      responses:
        '200':
          description: Response recorded

components:
  schemas:
    User:
      type: object
      properties:
        id: { type: string }
        name: { type: string }
        email: { type: string }
        phone: { type: string }
        photoUrl: { type: string }
        capabilities:
          type: object
          properties:
            isPlayer: { type: boolean }
            isOrganizer: { type: boolean }
        skillTags:
          type: array
          items: { type: string }
        location:
          type: object
          properties:
            lat: { type: number }
            lng: { type: number }
        reliabilityScore: { type: number }
        verified: { type: boolean }

    Game:
      type: object
      properties:
        id: { type: string }
        organizerId: { type: string }
        dateTime: { type: string, format: date-time }
        location:
          type: object
          properties:
            lat: { type: number }
            lng: { type: number }
            address: { type: string }
        description: { type: string }
        skillLevel: { type: string }
        maxPlayers: { type: integer }
        status:
          type: string
          enum: [open, full, cancelled]
"""

# Save to file
yaml_path = "/mnt/data/MatchMade_User_Game_API.yaml"
with open(yaml_path, "w") as f:
    f.write(openapi_yaml)

yaml_path