import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards } from '@nestjs/common';
import { UtilisateursService } from './utilisateurs.service';
import { CreateUtilisateurDto } from './dto/create-utilisateur.dto';
import { UpdateUtilisateurDto } from './dto/update-utilisateur.dto';
import { DataRequest } from 'src/interface/DataRequest';
import { ResponseService } from 'src/services/response/response.service';
import { CreateAdminsDto } from './dto/create-admin.dto';
import { NotifyService } from 'src/services/notify/notify.service';
import { CreatePartnerPwdDto } from './dto/update-partner-pwd.dto';
import { BanqueService } from 'src/config/structure/banque/banque.service';
@Controller('utilisateur')
export class UtilisateursController {
  constructor(private readonly utilisateursService: UtilisateursService, 
    private responseService: ResponseService, private readonly notifyService: NotifyService,
    private banqueService: BanqueService
  ) {}

  @Post()
  async create(@Body() createUtilisateurDto: CreateUtilisateurDto): Promise<DataRequest> {
    const banque = await this.banqueService.findAll();
    const data = await this.utilisateursService.create(createUtilisateurDto);
    const contenu = `
    Bonjour ${data.saveuser.nom.toLocaleUpperCase()} ${data.saveuser.prenoms} ,
    
    Votre compte sur la plateforme ${process.env.APP_NAME}a été créé avec succès.
    
    Voici vos informations de connexion temporaires :
    
    Identifiant : Votre adresse email 
    Mot de passe temporaire : ${data.password}
    
    Veuillez vous connecter à l’adresse suivante :  ${process.env.APP_URL}
    
    Pour des raisons de sécurité, ce mot de passe est temporaire. Vous serez invité à le modifier dès votre première connexion.
    
    Si vous n’êtes pas à l’origine de cette demande, merci de nous contacter immédiatement.
    
    Bien cordialement, 
    
    ${banque[0].libelle}
    `;
    //Envoi de l'otp par mail
    await this.notifyService.sendPostRequest(createUtilisateurDto.email, contenu, 'Votre compte a été créé avec succès');
    
     return this.responseService.success(
      'Utilisateur créé avec succès',
      {
        nom: data.saveuser.nom,
        prenoms: data.saveuser.prenoms,
        email: data.saveuser.email
      }
    );
  }

  @Post('admin')
  async createAdminUser(@Body() createUtilisateurDto: CreateAdminsDto): Promise<DataRequest> {
    const data = await this.utilisateursService.createAdminUser(createUtilisateurDto);
    return this.responseService.success('Enregistrement effectués avec succès', data);
  }

  @Get()
  async findAll(): Promise<DataRequest> {
    const data = await this.utilisateursService.findAll();
    return this.responseService.success('Liste des utilisateurs', data);
  }

  @Get(':id')
  async findOne(@Param('id') id: string): Promise<DataRequest> {
    const data = await this.utilisateursService.findOne(+id);
    return this.responseService.success('Utilisateur trouvé', data);
  }

 
  @Patch(':id')
  async update(@Param('id') id: string, @Body() updateUtilisateurDto: UpdateUtilisateurDto): Promise<DataRequest> {    
    const data = await this.utilisateursService.update(+id, updateUtilisateurDto);
    return this.responseService.success('Modification effectués avec succès', data);
  }


  @Patch('updatepwd/:id')
  async updatepwd(@Param('id') id: string, @Body() body: {password: string}): Promise<DataRequest> {
    const data = await this.utilisateursService.updatepwd(+id, body);
    return this.responseService.success('Modification du mot de passe effectuée avec succès', data);
  }


  @Patch('firstly/update/pwd/:email')
  async firsrlyUpdatePwd(@Param('email') email: string, @Body() body: CreatePartnerPwdDto): Promise<DataRequest> {
    const data = await this.utilisateursService.firsrlyUpdatePwd( email, body);
    return this.responseService.success(data);
  }

  @Delete(':id')
  async remove(@Param('id') id: string) {
    return await this.utilisateursService.remove(+id);
  }

  @Post('/testmail')
  async testmail(){
    return await this.notifyService.sendPostRequest('moise.deki@orangebank.ci', "contenu", 'Votre compte a été créé avec succès');
  }

}
