import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Settlement } from './entity/settlement.entity';
import { FindOptionsWhere, Repository } from 'typeorm';

@Injectable()
export class SettlementService {
  constructor(
    @InjectRepository(Settlement)
    private settlementRepository: Repository<Settlement>,
  ) {}

  save(data: Partial<Settlement>) {
    return this.settlementRepository.save(new Settlement(data));
  }

  findPage(params: Pagination & FindOptionsWhere<Settlement>) {
    const { pageNum, pageSize, ...data } = params;
    return this.settlementRepository.find({
      where: data,
      skip: pageSize * pageNum,
      take: pageSize,
      order: {
        createDate: 'DESC',
      },
    });
  }

  countField(uid: number, status: number) {
    return this.settlementRepository.query(
      `select sum(amount) as total from settlement where uid=? and status=?`,
      [uid, status],
    );
  }

  update(id: number, data: Partial<Settlement>) {
    return this.settlementRepository.update(id, new Settlement(data));
  }

  settlementById(uid: number) {
    return this.settlementRepository.update(
      { uid, status: 0 },
      new Settlement({
        status: 1,
      }),
    );
  }

  countGroupField() {
    return this.settlementRepository.query(
      'select uid, status, sum(amount) as total from wecan_settlement group by uid, status',
    );
  }
}
