import { CommonModule } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { IonButton, IonContent, IonFooter, IonIcon, IonTextarea } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons';
import { bookmarkOutline, chatbubbleEllipsesOutline, ellipsisHorizontal, happyOutline, heartOutline, shareSocialOutline } from 'ionicons/icons';
import { CustomHeaderComponent } from '../custom-header/custom-header.component';
import { CloudQuery, CloudUser } from 'src/lib/ncloud';
import { map, switchMap } from 'rxjs/operators';
import { CloudObject } from 'src/lib/ncloud';
import { FormsModule } from '@angular/forms';
import { IonModal } from '@ionic/angular/standalone';

addIcons({ ellipsisHorizontal, bookmarkOutline, heartOutline, shareSocialOutline, happyOutline, chatbubbleEllipsesOutline })


@Component({
  selector: 'app-post-detail',
  templateUrl: './post-detail.component.html',
  styleUrls: ['./post-detail.component.scss'],
  standalone: true,
  imports: [IonContent, IonIcon, IonButton, CommonModule, CustomHeaderComponent, IonTextarea, IonFooter, FormsModule, IonModal]
})
export class PostDetailComponent implements OnInit {
  postId: string | any;
  post: any;
  newComment: string = ''; // 新评论的内容
  isfooter: boolean = true; // 控制底部栏的样式
  comments: CloudObject[] = []; // 存储评论的数组
  isFollowed: boolean = false; // 初始状态为未关注
  constructor(private route: ActivatedRoute) { }
  /**
   * @从路由参数中获取帖子ID，并初始化帖子详情页面。
   */
  async ngOnInit() {
    this.route.paramMap.pipe(
      switchMap((params: ParamMap) => this.route.queryParamMap.pipe(
        map(() => params.get('postId'))
      ))
    ).subscribe(postId => {
      this.postId = postId;
      // 现在您可以使用 this.postId 来获取帖子详情或执行其他操作
    });
    console.log("正在加载帖子：" + this.postId)
    this.getPostDetail();
    await this.loadComments(); // 组件初始化时加载评论
  }

  //关注
  async toggleFollow() {
    const user=new CloudUser();
    const userId = user.toPointer(); // 获取当前用户ID
    if(user){
    if (this.isFollowed ) {
        // 如果已经关注，删除用户的关注记录
        const query = new CloudQuery('attention'); // 创建查询对象
        query.equalTo('attentionID', this.post.get('UserID').objectId); // 根据帖子作者ID查询
        query.equalTo('UserID', userId); // 根据用户ID查询
        const attentionRecord = await query.first(); // 获取关注记录对象
        //console.log(likeRecord);
        if(attentionRecord){
          await attentionRecord.destroy().then(() => {
            console.log('关注记录已删除:');
          })
        }   
    } else {
// 创建新的关注对象
const attention = new CloudObject("attention"); 
// 设置点赞记录的字段
await attention.set({
 UserID: new CloudUser().toPointer(), // 指向当前用户
 attentionID: { "__type": "Pointer", "className": "_User", "objectId":this.post.get('UserID').objectId }, // 关注对象指针
});
// 保存关注记录
await attention.save().then(() => {
console.log('关注记录已保存:');
})
}
    }
    this.isFollowed = !this.isFollowed; // 切换关注状态
  }
  /**
   * @获取帖子详情数据
   */
  async getPostDetail() {
    let query = new CloudQuery("post");
    query.include("UserID");
    query.equalTo("objectId", this.postId);
    let result = await query.find();
    this.post = result[0];
     // 判断用户有没有点赞过该帖子
     const Query = new CloudQuery('postLikesRecord'); // 创建查询对象
     Query.equalTo('UserID', new CloudUser().toPointer()); // 根据用户ID查询
     Query.equalTo('postID', this.post.toPointer()); // 根据帖子指针查询
     const likeRecord = await Query.first(); // 获取点赞记录
     if (likeRecord) {
      this.post.postisLiked = true; // 如果存在点赞记录，则帖子被当前用户点赞过
     } else {
      this.post.postisLiked = false; 
     }
    //console.log(this.post.get('UserID').objectId);
    // 判断用户有没有关注过该帖子发布者，显示相应的状态
    const query1 = new CloudQuery('attention'); // 创建查询对象
    query1.equalTo('attentionID', this.post.get('UserID').objectId); // 根据帖子作者ID查询
    query1.equalTo('UserID', new CloudUser().toPointer()); // 根据用户ID查询
    const attentionRecord = await query1.first(); // 获取关注记录对象
    if(attentionRecord){
      this.isFollowed = true; // 如果存在关注记录，则帖子发布者被当前用户关注过
    }else{
      this.isFollowed = false; // 如果不存在关注记录，则帖子发布者未被当前用户关注过
    }

  }

  // 加载与当前帖子相关的评论
  async loadComments() {
    const query = new CloudQuery("comment");
    query.equalTo("postID", { "__type": "Pointer", "className": "post", "objectId": this.postId }); // 根据帖子ID查询评论
    query.include('UserID'); // 包含 user 属性
    this.comments = await query.find(); // 获取评论
    console.log('加载的评论:', this.comments);

    for (const comment of this.comments) {
      // 判断用户有没有点赞过该评论
     const Query = new CloudQuery('commentLikesRecord'); // 创建查询对象
     Query.equalTo('UserID', new CloudUser().toPointer()); // 根据用户ID查询
     Query.equalTo('commentID', comment.toPointer()); // 根据评论指针查询
     const likeRecord = await Query.first(); // 获取点赞记录
     if (likeRecord) {
      comment.commentisLiked = true; // 如果存在点赞记录，则该评论被当前用户点赞过
     } else { // 如果不存在点赞记录，则该评论未被当前用户点赞过
      comment.commentisLiked = false; 
     }
    }
  }

  // 切换评论点赞状态并更新数据库
async toggleLike(comment: any) {
  comment.commentisLiked = !comment.commentisLiked; // 切换当前评论的点赞状态
  const commentId = comment.id; // 获取评论ID
  const userId = new CloudUser().toPointer() // 获取当前用户ID

  if (comment.commentisLiked) {   // 点赞
    comment.data.like += 1; // 增加点赞数
    await this.updateCommentLikeCount(commentId, 1,'comment'); // 更新数据库中的点赞数
    await this.saveCommentLikeRecord( commentId,"commentLikesRecord",true); // 保存点赞记录
  } else {
    // 取消点赞
    comment.data.like -= 1; // 减少点赞数
    await this.updateCommentLikeCount(commentId, -1,'comment'); // 更新数据库中的点赞数
    await this.removeCommentLikeRecord(userId, commentId,'commentLikesRecord',true); // 删除点赞记录
  }

}


// 切换帖子点赞状态并更新数据库
async toLike() {
  this.post.postisLiked = !this.post.postisLiked; // 切换当前帖子的点赞状态
  const postId = this.post.id; // 获取帖子ID
  const userId = new CloudUser().toPointer() // 获取当前用户ID

  if (this.post.postisLiked) {   // 点赞
    this.post.data.like += 1; // 增加点赞数
    await this.updateCommentLikeCount(postId, 1,'post'); // 更新数据库中的点赞数
    await this.saveCommentLikeRecord( postId,"postLikesRecord",false); // 保存点赞记录
  } else {
    // 取消点赞
    this.post.data.like -= 1; // 减少点赞数
    await this.updateCommentLikeCount(postId, -1,'post'); // 更新数据库中的点赞数
    await this.removeCommentLikeRecord(userId, postId,'postLikesRecord',false); // 删除点赞记录
  }

}


// 保存点赞记录
async saveCommentLikeRecord( Id:any,RecordTable:any,flag:boolean){
  // 创建新的点赞对象
  const likeRecord = new CloudObject(RecordTable); 
  const user = new CloudUser();
  const currentUser =  user.current(); // 获取当前用户信息
if (currentUser!=null) {
// 设置点赞记录的字段
if(flag){//如果为true则保存评论点赞记录
await likeRecord.set({
   UserID: new CloudUser().toPointer(), // 指向当前用户
   commentID: { "__type": "Pointer", "className": "comment", "objectId": Id }, // 评论指针
   
});
}
else{ //否则保存帖子点赞记录
  await likeRecord.set({
    UserID: new CloudUser().toPointer(), // 指向当前用户
    postID: { "__type": "Pointer", "className": "post", "objectId":Id  }, // 帖子指针
    
 });
}

console.log(likeRecord);

// 保存点赞记录
await likeRecord.save().then(() => {
  console.log('点赞记录已保存:');
})
}
}

// 更新评论点赞数
async updateCommentLikeCount(Id:any, count:number,Table:any){
  const query = new CloudQuery(Table); // 创建查询对象
  query.equalTo('objectId', Id); // 根据帖子ID查询
  //console.log(postId);
  const comment = await query.first(); // 获取对象
  //console.log(post);
  if(comment){
    comment.data['like'] += count; // 更新点赞数
   comment.id=Id;
  await comment.save().then(() => {
    console.log('评论点赞数已更新:');
  })
  }

}

 // 删除点赞记录
 async removeCommentLikeRecord(userId:any, Id:any,Table:any,flag:boolean){
  const query = new CloudQuery(Table); // 创建查询对象
  if(flag){
  query.equalTo('commentID', Id); // 根据评论ID查询
  }
  else{
    query.equalTo('postID', Id); // 根据帖子ID查询
  }
  query.equalTo('UserID', userId); // 根据用户ID查询
  const likeRecord = await query.first(); // 获取点赞记录对象
  //console.log(likeRecord);
  if(likeRecord){
    await likeRecord.destroy().then(() => {
      console.log('点赞记录已删除:');
    })
  }

}



  tocomment() {
    this.isfooter = false; // 切换底部栏的显示样式
    console.log(this.isfooter);
  }

  notcomment() {
    this.isfooter = true; // 切换底部栏的显示样式
  }

  async submitComment() {
    if (this.newComment.trim()) {
      // 创建新的评论对象
      const comment = new CloudObject("comment");
      const user = new CloudUser();
      const currentUser = await user.current(); // 获取当前用户信息
      if (currentUser) {
        // 设置评论的字段
        await comment.set({
          UserID: new CloudUser().toPointer(), // 指向当前用户
          postID: { "__type": "Pointer", "className": "post", "objectId": this.post.id }, // 帖子指针
          content: this.newComment.trim(), // 评论内容
          like: 0 // 初始点赞数为0
        });

        // 保存评论
        await comment.save().then(() => {
          console.log('评论已保存:', this.newComment);
          this.newComment = ''; // 清空输入框
        })
        await this.loadComments(); // 加载新评论
      }
    }
  }

  //用户评论时间
  formatTimeAgo(date: any): string {
    const date1 = new Date(date);
    const now = new Date();
    const seconds = Math.floor((now.getTime() - date1.getTime()) / 1000);
    //console.log("date1.getTime()",date1.getTime());
    //console.log("now.getTime()",now.getTime());
    //console.log("seconds",seconds);

    let interval = Math.floor(seconds / 31536000);
    if (interval >= 1) return interval + " 年前";
    interval = Math.floor(seconds / 2592000);
    if (interval >= 1) return interval + " 个月前";
    interval = Math.floor(seconds / 86400);
    if (interval >= 1) return interval + " 天前";
    interval = Math.floor(seconds / 3600);
    if (interval >= 1) return interval + " 小时前";
    interval = Math.floor(seconds / 60);
    if (interval >= 1) return interval + " 分钟前";
    return "刚刚";
  }

  isEmojiPickerOpen: boolean = false; // 控制表情选择器的打开状态
  emojis: string[] = ['😀', '😃', '😄', '😁', '😆', '😅', '🤣', '😂', '🙂', '🙃', '🫠', '😉', '😊', '😇', '🥰', '😍', '🤩', '😘',
    '😗', '☺️', '😚', '😙', '🥲', '😋', '😛', '😜', '🤪', '😝', '🤑', '🤗', '🤭', '🫢', '🫣', '🤫', '🤔', '🫡', '🤐', '🤨', '😐',
    '😑', '😶', '🫥', '😶‍🌫️', '😏', '😒', '🙄', '😬', '😮‍💨', '🤥', '🫨', '🙂‍↔️', '🙂‍↕️', '😌', '😔', '😪', '🤤', '😴', '🫩', '😷',
    '🤒', '🤕', '🤢', '🤮', '🤧', '🥵', '🥶', '🥴', '😵', '😵‍💫', '🤯', '🤠', '🥳', '🥸', '😎', '🤓', '🧐', '😕', '🫤', '😟',
    '🙁', '☹️', '😮', '😯', '😲', '😳', '🥺', '🥹', '😦', '😧', '😨', '😰', '😥', '😢', '😭', '😱', '😖', '😣', '😞', '😓',
    '😩', '😫', '🥱', '😤', '😡', '😠', '🤬', '😈', '👿', '💀', '☠️', '💩', '🤡', '👹', '👺', '👻', '👽', '👾', '🤖', '😺',
    '😸', '😹', '😻', '😼', '😽', '🙀', '😿', '😾', '🙈', '🙉', '🙊', '💌', '💘', '❤️', '🖤', '💋', '💯', '💢', '💥', '💫',
    '💦', '💤']; // 表情数组
  // 打开表情选择器
  openEmojiPicker() {
    this.isEmojiPickerOpen = true;
  }

  // 关闭表情选择器
  closeEmojiPicker() {
    this.isEmojiPickerOpen = false; // 关闭模态框
  }

  // 添加表情到输入框
  addEmoji(emoji: string) {
    this.newComment += emoji; // 将选中的表情添加到输入框
    this.closeEmojiPicker(); // 关闭模态框
  }



}