import { doc, getDoc, onSnapshot,collection ,getDocs, orderBy} from "@firebase/firestore"
import { USERS_DATA_POSTS_STATE_CHANGE, USERS_DATA_STATE_CHANGE, USER_FOLLOWING_STATE_CHANGE, USER_POSTS_STATE_CHANGE, USER_STATE_CHANGE } from "../constants"
import { db,auth } from "../../config/firebase"
export function fetchUser(){
return((dispatch)=>{
getDoc(doc(db, "users",auth.currentUser.uid))
.then((snapshot)=>{
if(snapshot.exists){
dispatch({type:USER_STATE_CHANGE,currentUser:snapshot.data()})
}
else{
console.log('donst not exit data!!!')
}
})
})
}
export function fetchUserPosts(){
return((dispatch)=>{
getDocs(collection(db, "Posts", auth.currentUser.uid, "userPost"))
.then((snapshot)=>{
const posts = snapshot.docs.map(doc=>{
const data = doc.data();
const id = doc.id;
return {id ,...data}
})
// console.log('posts',posts)
dispatch({type:USER_POSTS_STATE_CHANGE,posts})
}
export function fetchUserFollwowing(){
return((dispatch)=>{
onSnapshot(collection(db, "following", auth.currentUser.uid, "userFollowing"),
(snapshot)=>{
const following = snapshot.docs.map(doc=>{
const id = doc.id;
return id
})
console.log(following)
dispatch({type:USER_FOLLOWING_STATE_CHANGE,following});
for (let i = 0; i < following.length; i++) {
dispatch(fetchUsersData(following[i]));
}
}
export function fetchUsersData (uid){
return ((dispatch,getState)=>{
console.log('uid',uid)
const found = getState().usersState?.users.some(el => el.uid === uid);
if(!found){
getDoc(doc(db, "users",uid))
.then((snapshot)=>{
if(snapshot.exists){
let user = snapshot.data();
user.uid = snapshot.id;
dispatch({type:USERS_DATA_STATE_CHANGE,user});
dispatch(fetchUsersFollowingPosts(user.id));
}
else{
console.log('donst not exit data!!!')
}
})
}
})
}
export function fetchUsersFollowingPosts(uid){
return((dispatch,getState)=>{
getDocs(collection(db, "Posts",uid, "userPost"))
// .orderBy("timestamp","asc")
.then((snapshot)=>{
const uid = snapshot.query.EP.path.segments[1];
console.log('segments',uid)
const user = getState().usersState.users.find(el => el.uid === uid);
const posts = snapshot.docs.map(doc=>{
const data = doc.data();
const id = doc.id;
return {id ,...data,user}
})
console.log('posts',posts)
dispatch({type:USERS_DATA_POSTS_STATE_CHANGE,posts,uid})
console.log('posts',getState())
}