import { Request, Response } from 'express'
import { response } from '../utils'
import { GalleryService } from '../services'
import { GalleryValidation } from '../validations'
const service = GalleryService
const validation = GalleryValidation
export default {
  get: async (req: Request, res: Response): Promise<void> => {
    try {
      const params: any = req.query
      const data = await service.get({
        page: params.page || 1,
        pageSize: params.pageSize || 10,
      })
      response.success({
        res,
        status: 200,
        data: data,
      })
    } catch (err: any) {
      response.error({
        res,
        message: err.message,
        status: 500,
      })
    }
  },
  store: async (req: Request, res: Response): Promise<void> => {
    try {
      const { value, error } = validation.validate(req.body, { context: { method: 'post' } })
      if (!!error) {
        response.error({
          res,
          message: error.details[0].message,
          status: 422,
          errors: error.details?.map((item) => item?.message),
        })
        return
      } else {
        const data = await service.store(value)
        response.success({
          res,
          status: 200,
          data: data,
        })
      }
    } catch (err: any) {
      response.error({
        res,
        message: err.message,
        status: 500,
      })
    }
  },
  update: async (req: Request, res: Response): Promise<void> => {
    try {
      const { value, error } = validation.validate(req.body)
      if (!!error) {
        response.error({
          res,
          message: error.details[0].message,
          status: 422,
          errors: error.details?.map((item) => item?.message),
        })
        return
      } else {
        const data = await service.update(value, req.params.id)
        response.success({
          res,
          status: 200,
          data: data,
        })
      }
    } catch (err: any) {
      response.error({
        res,
        message: err.message,
        status: 500,
      })
    }
  },
  getById: async (req: Request, res: Response): Promise<void> => {
    try {
      const data = await service.getById(req.params.id)
      response.success({
        res,
        status: 200,
        data: data,
      })
    } catch (err: any) {
      response.error({
        res,
        message: err.message,
        status: 500,
      })
    }
  },
  delete: async (req: Request, res: Response): Promise<void> => {
    try {
      const data = await service.delete(req.params.id)
      response.success({
        res,
        status: 200,
        data: data,
      })
    } catch (err: any) {
      response.error({
        res,
        message: err.message,
        status: 500,
      })
    }
  },
  deleteImage: async (req: Request, res: Response): Promise<void> => {
    try {
      const data = await service.deleteImage(req.params.id)
      response.success({
        res,
        status: 200,
        data: data,
      })
    } catch (err: any) {
      response.error({
        res,
        message: err.message,
        status: 500,
      })
    }
  },
}
