import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import axios from 'axios';

@Injectable()
export class InstagramProvider {
  private readonly logger = new Logger(InstagramProvider.name);
  private readonly apiVersion = 'v22.0';
  private accessToken: string;
  private igAccountId: string;

  constructor(private configService: ConfigService) {
    this.accessToken = this.configService.get<string>('INSTAGRAM_ACCESS_TOKEN');
    this.igAccountId = this.configService.get<string>('INSTAGRAM_ACCOUNT_ID');
  }

  async publishPost(content: string, imageUrl: string): Promise<string> {
    try {
      // Create container
      const containerResponse = await axios.post(
        `https://graph.facebook.com/${this.apiVersion}/${this.igAccountId}/media`,
        {
          image_url: imageUrl,
          caption: content,
        },
        {
          params: { access_token: this.accessToken },
        },
      );

      const containerId = containerResponse.data.id;

      // Publish container
      const publishResponse = await axios.post(
        `https://graph.facebook.com/${this.apiVersion}/${this.igAccountId}/media_publish`,
        {
          creation_id: containerId,
        },
        {
          params: { access_token: this.accessToken },
        },
      );

      return publishResponse.data.id;
    } catch (error) {
      this.logger.error(`Instagram post failed: ${error.message}`, error.stack);
      throw new Error(`Failed to publish to Instagram: ${error.message}`);
    }
  }
}
