import { DrizzleService } from '@lib/drizzle/src/drizzle.service';
import { Injectable } from '@nestjs/common';
import dayjs from 'dayjs';
import { eq } from 'drizzle-orm';
import { tnRefund, tnSubscribe } from 'drizzle/schema';
import { CreatedRefundDto } from './refund.dto';

@Injectable()
export class RefundRepository {
  constructor(private drizzle: DrizzleService) {}

  async create(dto: CreatedRefundDto) {
    await this.drizzle.transaction(async (tx) => {
      await tx.insert(tnRefund).values({
        ordId: dto.ordId,
        refState: dto.refState,
        refBank: dto.refBank,
        refPrice: dto.refPrice,
        refAccountName: dto.refAccountName,
        refAccountNumber: dto.refAccountNumber,
        refMemo: dto.refMemo,
        refCompletedAt:
          dto.refState === 'REF001'
            ? dayjs().format('YYYY-MM-DD HH:mm:ss')
            : undefined,
      });
      if (dto.refState === 'REF001') {
        await tx
          .update(tnSubscribe)
          .set({
            subState: dto.subState,
            subDisabledAt: dto.subDisabledAt,
            subDisableCompletedAt: dto.subDisableCompletedAt,
          })
          .where(eq(tnSubscribe.subId, dto.subId));
      }
    });
  }

  // async update(id: number, dto: UpdateRefundDto) {
  //   await this.drizzle
  //     .update(tnRefund)
  //     .set({
  //       ...dto,
  //       refCompletedAt:
  //         dto.refState === 'REF001'
  //           ? dayjs().format('YYYY-MM-DD HH:mm:ss')
  //           : null,
  //     })
  //     .where(eq(tnRefund.refId, id));
  // }

  // async delete(id: number) {
  //   await this.drizzle.delete(tnRefund).where(eq(tnRefund.refId, id));
  // }
}
