import { PrismaClient } from '@prisma/client'
import { Request, Response, Router } from 'express'
import {{MODEL_NAME}}Controller from './{{MODULE_NAME}}-controller'
import { AppRouter } from 'reboot-solutions-cms'

export default class {{MODEL_NAME}}Router implements AppRouter {
  public readonly router: Router = Router()
  private readonly controller: {{MODEL_NAME}}Controller 

  constructor(public prismaClient: PrismaClient) {
    this.controller = new {{MODEL_NAME}}Controller(prismaClient)
  }

  public index() {
    /**
 * @swagger
 * /{{MODULE_NAME}}:
 *   get:
 *     description: Returns all {{MODULE_NAME}}
 *     responses:
 *       200:
 *         description: An array of {{MODULE_NAME}}
 */
    this.router.get('/', (request: Request, response: Response) =>
      this.controller.index(request, response)
    )
    return this
  }

  public show() {
       /**
 * @swagger
 * /{{MODULE_NAME}}:
 *   get:
 *     description: Returns all {{MODULE_NAME}}
 *     responses:
 *       200:
 *         description: An array of {{MODULE_NAME}}
 */
    this.router.get('/:id', async (request: Request, response: Response) => {
      this.controller.show(request, response)
    })
    return this
  }

  public store() {
       /**
 * @swagger
 * /{{MODULE_NAME}}:
 *   post:
 *     description: Returns all {{MODULE_NAME}}
 *     responses:
 *       200:
 *         description: An array of {{MODULE_NAME}}
 */
    this.router.post('/', async (request: Request, response: Response) => {
      this.controller.store(request, response)
    })
    return this
  }

  public update() {
       /**
 * @swagger
 * /{{MODULE_NAME}}:
 *   patch:
 *     description: Returns all {{MODULE_NAME}}
 *     responses:
 *       200:
 *         description: An array of {{MODULE_NAME}}
 */
    this.router.patch('/:id', async (request: Request, response: Response) => {
      this.controller.update(request, response)
    })
    return this
  }
  public delete() {
       /**
 * @swagger
 * /{{MODULE_NAME}}:
 *   delete:
 *     description: Returns all {{MODULE_NAME}}
 *     responses:
 *       200:
 *         description: An array of {{MODULE_NAME}}
 */
    this.router.delete('/:id', async (request: Request, response: Response) => {
      this.controller.destroy(request, response)
    })
    return this
  }
}
