import { Body, Controller, Delete, Get, Post, Req, UseGuards } from '@nestjs/common';
import { SignupDto } from './dto/signupDto';
import { AuthService } from './auth.service';
import { SigninDto } from './dto/signinDto';
import { ResetPwdDto } from './dto/resetPwdDto';
import { ResetPwdConfirmationDto } from './dto/ResetPwdConfirmationDto';
import { AuthGuard } from '@nestjs/passport';
import { Request } from 'express';
import { DeleteAccountDto } from './dto/deleteAccountDto';
import { UserDto } from './dto/userDto';
import { ChangePwdDto } from './dto/changePwdDto';

@Controller('auth')
export class AuthController {
 
    constructor(private readonly authService: AuthService){}

    @Get('isup')
    isUp(){
        return 'IS UP'
    }
    @Post("signup")
    signup(@Body() signupDto: SignupDto){
        return this.authService.signup(signupDto)
    }

    @Post("signin")
    signin(@Body() signinDto: SigninDto){
        return this.authService.signin(signinDto)
    }

    @UseGuards(AuthGuard("jwt"))
    @Post("change-pwd")
    changePwd(@Req() request: Request, @Body() changePwdDto: ChangePwdDto){
        const userId = request.user['id']
        return this.authService.changePwd(changePwdDto,userId)
    }

    @Post("reset-password")
    resetPwd(@Body() resetPwdDto: ResetPwdDto){
        return this.authService.resetPwd(resetPwdDto)
    }

    @Post("reset-password-confirmation")
    resetPwdConfirmation(@Body() resetPwdConfirmationDto: ResetPwdConfirmationDto){
        return this.authService.resetPwdConfirmation(resetPwdConfirmationDto)
    }

    @UseGuards(AuthGuard("jwt"))
    @Post('new-user')
    addUser(@Body() userDto: UserDto, @Req() request: Request){
        const fastFoodId = request.user['fastFoodId']
        return this.authService.createUser(userDto, fastFoodId)
    }

    @UseGuards(AuthGuard("jwt"))
    @Delete("delete-account")
    deleteAccount(@Req() request: Request, @Body() deleteAccountDto:DeleteAccountDto){
        const userId = request.user['id']
        return this.authService.deleteUser(userId, deleteAccountDto)
    }

    @UseGuards(AuthGuard("jwt"))
    @Post("logout")
    logout(@Req() request: Request){
        request.logOut(function(err) {
            if (err) { return {message:"ERROR"}; }
            return {message:"SUCCESS"};
        });
    }
}
