import { Request, Response } from 'express'
import { authService } from './auth.service'
import { AuthRequest } from '../../shared/middleware/auth'

export const authController = {
  register: async (req: Request, res: Response) => {
    try {
      const result = await authService.register(req.body)
      res.status(201).json({
        success: true,
        message: 'تم التسجيل بنجاح',
        data: result
      })
    } catch (error: any) {
      res.status(400).json({
        success: false,
        message: error.message
      })
    }
  },

  login: async (req: Request, res: Response) => {
    try {
   
      const { email, password } = req.body

      if (!email || !password) {
        return res.status(400).json({
          success: false,
          message: 'الرجاء إدخال البريد/اسم المستخدم وكلمة المرور'
        })
      }

      const result = await authService.login(String(email).trim(), String(password))

      res.status(200).json({
        success: true,
        message: 'تم تسجيل الدخول بنجاح',
        data: result
      })
    } catch (error: any) {
      res.status(error?.statusCode || 401).json({
        success: false,
        message: error.message || 'بيانات الدخول غير صحيحة'
      })
    }
  },

  me: async (req: AuthRequest, res: Response) => {
    try {
      const userId = req.user?.id
      if (!userId) {
        return res.status(401).json({
          success: false,
          message: 'غير مصرح'
        })
      }

      const user = await authService.getUserById(userId)
      res.status(200).json({
        success: true,
        message: 'تم جلب البيانات بنجاح',
        data: user
      })
    } catch (error: any) {
      res.status(400).json({
        success: false,
        message: error.message
      })
    }
  },

  refreshToken: async (req: Request, res: Response) => {
    try {
      const { refreshToken } = req.body
      const result = await authService.refreshToken(refreshToken)
      res.status(200).json({
        success: true,
        message: 'تم تحديث الرمز بنجاح',
        data: result
      })
    } catch (error: any) {
      res.status(401).json({
        success: false,
        message: error.message
      })
    }
  },

  logout: async (req: AuthRequest, res: Response) => {
    try {
      const userId = req.user?.id
      if (userId) {
        await authService.logout(userId)
      }
      res.status(200).json({
        success: true,
        message: 'تم تسجيل الخروج بنجاح'
      })
    } catch (error: any) {
      res.status(400).json({
        success: false,
        message: error.message
      })
    }
  }
}