class PaullGenericController {

    @GetMapping("/infosdoc/{idFlux}")
    public ResponseEntity<?> infosDocument(@PathVariable String siren, @PathVariable Integer idFlux,
            @RequestHeader("userid") String userid, @RequestHeader("password") String password) throws IOException {

        Map<String, Object> data = new HashMap<>();

        if (paullService.emailAuth(userid, password) == null) return this.authGenericAccountForbidden(data);

        Optional<LocalAuthority> localAuthority = localAuthorityService.getBySiren(StringUtils.removeStart(siren, "sys"));

        if (!localAuthority.isPresent()) return this.notFoundLocalAuthority(data);

        ResponseEntity<Classeur> classeurResponse = sesileService.checkClasseurStatus(localAuthority.get(), idFlux);
        Optional<GenericDocument> genericDocument = sesileService.getGenericDocument(idFlux);

        if ((classeurResponse.getStatusCode().isError() && !classeurResponse.hasBody()) || !genericDocument.isPresent())
            return this.notFoundClasseur(data);

        Classeur classeur = classeurResponse.getBody();

        if (classeur == null)
            return this.errorWhileSearchingClasseur(data);

        if (classeur.getDocuments().isEmpty())
            return this.noDocumentInClasseur(data);

        Document document = classeur.getDocuments().get(0);
        data.put("Title", classeur.getNom());
        data.put("Name", classeur.getNom());
        data.put("Username", genericDocument.get().getDepositEmail());
        data.put("NomDocument", document.getName());
        data.put("dateDepot", classeur.getCreation());
        data.put("datevalide", classeur.getValidation());
        data.put("service", classeur.getCircuit());
        data.put("EtatClasseur", classeur.getStatus().ordinal());

        return new ResponseEntity<Object>(generatePaullResponse(HttpStatus.OK, data, "OK"), HttpStatus.OK);
    }

    public  PaullGenericController(SesileService sesileService, LocalAuthorityService localAuthorityService,
                                  PaullService paullService, ExternalRestService externalRestService);

}