package whatsapp
import (
"github.com/golang-jwt/jwt"
"github.com/labstack/echo/v4"
"github.com/dimaskiddo/go-whatsapp-multidevice-rest/pkg/router"
pkgWhatsApp "github.com/dimaskiddo/go-whatsapp-multidevice-rest/pkg/whatsapp"
typAuth "github.com/dimaskiddo/go-whatsapp-multidevice-rest/internal/auth/types"
typWhatsApp "github.com/dimaskiddo/go-whatsapp-multidevice-rest/internal/whatsapp/types"
)
func jwtPayload(c echo.Context) typAuth.AuthJWTClaimsPayload {
jwtToken := c.Get("user").(*jwt.Token)
jwtClaims := jwtToken.Claims.(*typAuth.AuthJWTClaims)
return jwtClaims.Data
}
func Login(c echo.Context) error {
jid := jwtPayload(c).JID
var reqLogin typWhatsApp.RequestLogin
reqLogin.Output = c.FormValue("output")
if reqLogin.Output == "" {
reqLogin.Output = "html"
}
err := pkgWhatsApp.WhatAppConnect(jid)
if err != nil {
return router.ResponseInternalError(c, err.Error())
}
qrCodeImage, qrCodeTimeout, err := pkgWhatsApp.WhatsAppLogin(jid)
if err != nil {
return router.ResponseInternalError(c, err.Error())
}
var resLogin typWhatsApp.ResponseLogin
resLogin.QRCode = qrCodeImage
resLogin.Timeout = qrCodeTimeout
if reqLogin.Output == "html" {
htmlContent := `
WhatsApp MultiDevice Login
QR Code Scan
Timeout in ` + resLogin.Timeout + `
`
return router.ResponseSuccessWithHTML(c, htmlContent)
}
return router.ResponseSuccessWithData(c, "Successfully Generated QR Code", resLogin)
}
func Logout(c echo.Context) error {
jid := jwtPayload(c).JID
err := pkgWhatsApp.WhatsAppLogout(jid)
if err != nil {
return router.ResponseInternalError(c, err.Error())
}
return router.ResponseSuccess(c, "Successfully Logged Out")
}
func SendText(c echo.Context) error {
jid := jwtPayload(c).JID
var reqSendMessage typWhatsApp.RequestSendMessage
reqSendMessage.RJID = c.FormValue("msisdn")
reqSendMessage.Message = c.FormValue("message")
err := pkgWhatsApp.WhatsAppSendText(jid, reqSendMessage.RJID, reqSendMessage.Message)
if err != nil {
return router.ResponseInternalError(c, err.Error())
}
return router.ResponseSuccess(c, "Successfully Send Text Message")
}
/*
TODO: Send Media
*/
/*
func SendLocation(c echo.Context) error {
return router.ResponseSuccess(c, "Successfully Send Location Message")
}
func SendDocument(c echo.Context) error {
return router.ResponseSuccess(c, "Successfully Send Document Message")
}
func SendImage(c echo.Context) error {
return router.ResponseSuccess(c, "Successfully Send Image Message")
}
func SendAudio(c echo.Context) error {
return router.ResponseSuccess(c, "Successfully Send Audio Message")
}
func SendVideo(c echo.Context) error {
return router.ResponseSuccess(c, "Successfully Send Video Message")
}
*/