import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { WeChatConfig } from '@common/config/types';
import { CreatePublishDto } from './dto/create';
import { PlatformTarget, PublishSdkContainer, WechatPublishSdk } from './sdk';
import { ResultDto } from '@common/dto/result.dto';

@Injectable()
export class PublishService {
  constructor(
    private publishSdkContainer: PublishSdkContainer,
    private configService: ConfigService,
  ) {
    this.publishSdkContainer.register(
      PlatformTarget.WeChat,
      new WechatPublishSdk(
        this.configService.get<WeChatConfig>('publishConfig.wechat'),
      ),
    );
  }

  async publish(payload: CreatePublishDto) {
    const targetPlatform = this.publishSdkContainer.getSDK(payload.target);
    const publishRes = await targetPlatform.publish(null, payload.articles);
    return ResultDto.ok(publishRes);
  }

  async getAllWechatImageMaterial(offset = 0, count = 20) {
    const wechatPlatform = this.publishSdkContainer.getSDK(
      PlatformTarget.WeChat,
    ) as WechatPublishSdk;
    const materialList = await wechatPlatform.getAllWechatImageMaterial(
      offset,
      count,
    );
    return ResultDto.ok(materialList);
  }
}