content: package br.com.alevhvm.adotai.common.docs;
  
  import java.util.Map;
  
  import org.springframework.hateoas.EntityModel;
  import org.springframework.hateoas.PagedModel;
  import org.springframework.http.ResponseEntity;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.RequestBody;
  
  import br.com.alevhvm.adotai.adocao.dto.AdocaoDTO;
  import br.com.alevhvm.adotai.animal.dto.AnimalDTO;
  import br.com.alevhvm.adotai.common.enums.StatusConta;
  import br.com.alevhvm.adotai.ong.dto.OngDTO;
  import br.com.alevhvm.adotai.ong.dto.OngUpdateDTO;
  import io.swagger.v3.oas.annotations.Operation;
  import io.swagger.v3.oas.annotations.Parameter;
  import io.swagger.v3.oas.annotations.media.ArraySchema;
  import io.swagger.v3.oas.annotations.media.Content;
  import io.swagger.v3.oas.annotations.media.Schema;
  import io.swagger.v3.oas.annotations.responses.ApiResponse;
  import jakarta.validation.Valid;
  
  public interface OngControllerDocs {
      @Operation(summary = "Retorna todas as ONGs", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = OngDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<PagedModel<EntityModel<OngDTO>>> listarOngs(
              @Parameter(description = "Número da página (padrão 0)") int page,
              @Parameter(description = "Tamanho da página (padrão 10)") int size,
              @Parameter(description = "Direção da ordenação: asc ou desc (padrão asc)") String direction);
  
  
      @Operation(summary = "Retorna a ONG de id especificado", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = OngDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<OngDTO> acharOngPorId(
              @Parameter(description = "ID da ONG") 
              @PathVariable Long id);
  
      @Operation(summary = "Retorna a ong pelo nome de usuário pesquisado", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = OngDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<OngDTO> acharOngPorNomeUsuario(
              @Parameter(description = "Nome de usuário da ONG") 
              @PathVariable("nomeUsuario") String nomeUsuario);
  
      @Operation(summary = "Retorna todas as adoções de uma ONG", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = AdocaoDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<PagedModel<EntityModel<AdocaoDTO>>> listarAdocoesPorOngId(
              @Parameter(description = "ID da ONG") 
              @PathVariable Long id,
              @Parameter(description = "Número da página (padrão 0)") int page,
              @Parameter(description = "Tamanho da página (padrão 10)") int size,
              @Parameter(description = "Direção da ordenação: asc ou desc (padrão asc)") String direction);
  
      @Operation(summary = "Retorna todas os Animais de uma ONG", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = AnimalDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<PagedModel<EntityModel<AnimalDTO>>> listarAnimaisDeUmaOng(
              @Parameter(description = "Nome de usuário da ONG") 
              @PathVariable String nomeUsuario,
              @Parameter(description = "Número da página (padrão 0)") int page,
              @Parameter(description = "Tamanho da página (padrão 10)") int size,
              @Parameter(description = "Direção da ordenação: asc ou desc (padrão asc)") String direction);
  
      @Operation(summary = "Registra uma ONG", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = OngDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<OngDTO> registrarOng(
              @Parameter(description = "Dados da ONG a ser registrada") 
              @RequestBody @Valid OngDTO ong);
  
      @Operation(summary = "Atualiza a ONG", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = OngDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<OngDTO> atualizarOng(
              @Parameter(description = "Nome de usuário da ONG a ser atualizada") 
              @PathVariable String nomeUsuario,
              @Parameter(description = "Dados atualizados da ONG") 
              @RequestBody @Valid OngUpdateDTO ong);
  
      @Operation(summary = "Atualização parcial da ONG", responses = {
              @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = OngDTO.class)))),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<OngDTO> atualizarParcialOng(
              @Parameter(description = "Nome de usuário da ONG a ser atualizada") 
              @PathVariable String nomeUsuario,
              @Parameter(description = "Campos e valores para atualização parcial") 
              @RequestBody Map<String, Object> updates);
  
      @Operation(summary = "Apaga a ONG de nome especificado", responses = {
              @ApiResponse(responseCode = "204", description = "No Content", content = @Content),
              @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
              @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
              @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
              @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
      })
      ResponseEntity<?> deletarOngPorNomeUsuario(
              @Parameter(description = "Nome de usuário da ONG a ser deletada") 
              @PathVariable String nomeUsuario);
  
      @Operation(summary = "Ativa ou desativa a conta da ong", responses = {
          @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", schema = @Schema(implementation = String.class))),
          @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
          @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
          @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
          @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
          })
          ResponseEntity<String> toggleStatus(
                  @Parameter(description = "Nome de usuário da ong") 
                  @PathVariable String nomeUsuario);
  
  
          @Operation(summary = "Bloqueia a conta da ong", responses = {
                  @ApiResponse(responseCode = "200", description = "Success", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StatusConta.class))),
                  @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content),
                  @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content),
                  @ApiResponse(responseCode = "404", description = "Not Found", content = @Content),
                  @ApiResponse(responseCode = "500", description = "Internal Error", content = @Content)
          })
          ResponseEntity<StatusConta> bloquearOng(
                  @Parameter(description = "Nome de usuário da ong") 
                  @PathVariable String nomeUsuario);
  }
  