import { ConflictException, Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
import { MotifDto } from './dto/motifDto';
import { DepenseDto } from './dto/depenseDto';

@Injectable()
export class DepenseService {
    constructor(private readonly prismaService: PrismaService){}

    async createMotif(motifDto: MotifDto, fastFoodId: number){

        const existMotif = await this.prismaService.motifDepense.findFirst({where:{libelle:motifDto.libelle,fastFoodId}})

        if(existMotif) throw new ConflictException("Motif existe déja")

        await this.prismaService.motifDepense.create({data:{libelle:motifDto.libelle, fastFoodId}})

        return {
            status:'SUCCESS',
            message:'Success'
        }
    }

    async getMotifByFastFood(fastFoodId: number){

        const motifs = await this.prismaService.motifDepense.findMany({where:{fastFoodId}})

        return {
            status:'SUCCESS',
            message:'Success',
            data:motifs
        }
    }

    async createDepense(depenseDto: DepenseDto, fastFoodId: number, userId: number){

        await this.prismaService.depense.create({
            data:{
                fastFoodId,
                userId,
                montant:depenseDto.montant,
                motifDepenseId:depenseDto.motifDepenseId,
                modePaymentId:depenseDto.modePaymentId,
            }
        })

        return {
            status:'SUCCESS',
            message:'Success'
        }
    }

    async getDepenseByFastFood(fastFoodId: number, size: number, page: number){
        
        const depenses = await this.prismaService.depense.findMany({
            where:{
                fastFoodId
            },
            include:{
                modePayment:true,
                motifDepense:true,
            },
            skip:size*page,
            take:size,
            orderBy:{
                createdAt:'desc'
            }
        })

        return {
            status:'SUCCESS',
            message:'Success',
            data:depenses
        }
    }

    async getDetailsDepense(depenseId: number){
        return {
            status:'SUCCESS',
            message:'Success',
            data: await this.prismaService.depense.findUnique({where:{id:depenseId}})
        }
    }
}
