import { Injectable, HttpException, HttpStatus } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import axios from 'axios';
import { channel } from 'diagnostics_channel';
const moment = require('moment');
import { env } from 'process';
import { KeyType, Settings } from 'src/entities/settings.entity';
import { SocialMediaPosts } from 'src/entities/social-media-posts.entity';
import { SocialMedias, SocialType } from 'src/entities/social-medias.entity';
import { TikTokProfiles } from 'src/entities/tiktok-profile.entity';
import { TikTokVideos } from 'src/entities/tiktok-videos.entity';
import { Users } from 'src/entities/users.entity';
import { XiaohongshuProfiles } from 'src/entities/xiaohongshu-profile.entity';
import { YoutubeChannels } from 'src/entities/youtube-channel.entity';
import { YoutubeVideos } from 'src/entities/youtube-videos.entity';
import { responseMessages } from 'src/messages/response-messages';
import { Repository } from 'typeorm';

@Injectable()
export class XiaohongshuServices {

    constructor(

        @InjectRepository(Users)
        private Users: Repository<Users>,

        @InjectRepository(SocialMedias)
        private SocialMedias: Repository<SocialMedias>,

        @InjectRepository(XiaohongshuProfiles)
        private XiaohongshuProfiles: Repository<XiaohongshuProfiles>,

        @InjectRepository(Settings)
        private Settings: Repository<Settings>,

        @InjectRepository(SocialMediaPosts)
        private SocialMediaPosts: Repository<SocialMediaPosts>,

    ) { }



    async xiaohongshuEdit(request, id) {

        const xiaohongshuProfiles = await this.XiaohongshuProfiles.findOne({ where: { id: id } });
        if (!xiaohongshuProfiles) {
            throw new HttpException(responseMessages.en.user.social_media.not_exists, HttpStatus.RESET_CONTENT);
        }

        xiaohongshuProfiles['description'] = request.bio;
        xiaohongshuProfiles['name'] = request.name;
        xiaohongshuProfiles['city_name'] = request.city;
        xiaohongshuProfiles['country_name'] = request.country;
        xiaohongshuProfiles['gender'] = request.gender;

        this.XiaohongshuProfiles.save(xiaohongshuProfiles)
        return;
    }

    /**
     * Unlinks a TikTok account from the user's profile.
     * 
     * @param socialMedia - The social media account object to be unlinked.
     * 
     * Deletes all related TikTok videos, profiles, social media posts and the social media account itself.
     */
    async unlinkXiaohingshu(socialMedia) {
        await this.XiaohongshuProfiles.softDelete({ socialMedia: socialMedia });
        await this.SocialMedias.softDelete({ id: socialMedia.id });
    }

    async getAxios(url, headers, params) {
        try {
            const response = await axios.get(url, { headers, params });
            // Handle the response data
            return response.data;

        } catch (error) {
            throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
        }
    }

    async postAxios(url, headers, data, params = null) {
        try {
            const response = await axios.post(url, data, { headers, params });
            // Handle the response data
            return response.data;

        } catch (error) {
            throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
        }
    }

}
