'use strict'

/*
|--------------------------------------------------------------------------
| Routes
|--------------------------------------------------------------------------
|
| Http routes are entry points to your web application. You can create
| routes for different URL's and bind Controller actions to them.
|
| A complete guide on routing is available here.
| http://adonisjs.com/docs/4.1/routing
|
*/

/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */
const Route = use('Route')


/*
/ Auth
*/
Route.get('/logout', 'AuthController.logout').as('logout').middleware(['auth']);
Route.get('/register', 'AuthController.registerIndex').as('register');
Route.get('/login', 'AuthController.loginIndex').as('login');
Route.post('/register', 'AuthController.register').validator('Register');
Route.post('/login', 'AuthController.login').validator('Login');

// reset-password
Route.post('/password/request/reset', 'AuthController.resetPasswordRequest')
        .validator('ResetPasswordRequest')
        .as('resetPasswordRequest');
Route.get('/password/reset', 'AuthController.resetPasswordRequestIndex');
Route.get('/password/reset/:token', 'AuthController.resetPasswordIndex');
Route.post('/password/reset', 'AuthController.resetPassword')
        .validator('ResetPassword')
        .as('resetPassword');

/*
/ Client API
*/

Route
    .group(() => {
      Route.post('connections/create', 'ClientApiController.createConnection');
      Route.get('user', 'ClientApiController.getUser');
      Route.post('child', 'ClientApiController.createChild');
      Route.get('child/:id', 'ClientApiController.getChild');
      Route.post('child/:id', 'ClientApiController.updateChild');
      Route.post('call/create', 'ClientApiController.createCall');
    })
    .prefix('api/v1/client')
    .middleware(['auth']);

/**
 * Private book assets
 */
Route
    .get(
        '/u/call/:callId/books/:bookId/page/:pageNumber',
        'BookApiController.getPage')
    .middleware(['auth', 'BookContext', 'CallContext', 'BookPageAuth']);
/**
 * Public book thumbnail
 */
Route.get('/u/books/:bookId/thumbnail', 'BookApiController.getThumbnail')
    .middleware(['auth', 'BookContext'])
/*
/ Pubic CDN Images
*/
Route.get('/u/images/:fileName', 'CdnController.publicImages');

/*
/ Admin API
*/
// API
Route
    .group(() => {
      Route.get('users', 'AdminApiController.getUsers');
      Route.get(
          'settings/email/test/result', 'AdminApiController.testEmailSettings');
    })
    .prefix('/api/v1/admin')
    .middleware(['auth', 'adminAuth']);
Route
    .group(() => {
      //
      Route.get('/*', 'AdminController.index');
    })
    .prefix('admin')
    .middleware(['auth', 'adminAuth']);



/** Basic APIs */
// Route
//     .get(
//         '/users/profile',
//         ({request, response, auth}) => {
//           console.log('twergsg');
//           const u = auth.user.publicJSON();

//           response.send(u);
//           // return auth.user;
//         })
//     .middleware(['auth']);
Route.get('/*', 'IndexController.index').as('home');
