package repositories

import (
	configs "astrology-api/configs"
	dto "astrology-api/dto"
	homemodel "astrology-api/models/usermodel"
)

func GetBanners() ([]homemodel.Banner, error) {

	var banners []homemodel.Banner
	err := configs.DB.
		Table("banners").
		Joins("LEFT JOIN banner_types ON banner_types.id = banners.bannerTypeId").
		Where("banners.isActive = ?", 1).
		Where("banners.isDelete = ?", 0).
		Select("banners.*, banner_types.name as bannerType").
		Order("banners.id DESC").
		Limit(10).
		Find(&banners).Error
	return banners, err
}

func GetBlogs() ([]homemodel.Blog, error) {

	var blogs []homemodel.Blog

	err := configs.DB.
		Table("blogs").
		Where("isActive = ?", 1).
		Where("isDelete = ?", 0).
		Order("id DESC").
		Limit(10).
		Find(&blogs).Error

	return blogs, err
}

func GetProductCategories() ([]homemodel.ProductCategory, error) {

	var categories []homemodel.ProductCategory

	err := configs.DB.
		Table("product_categories").
		Where("isActive = ?", 1).
		Where("isDelete = ?", 0).
		Order("id DESC").
		Limit(10).
		Find(&categories).Error

	return categories, err
}

func GetAstrotalkInNews() ([]homemodel.AstrotalkInNews, error) {

	var news []homemodel.AstrotalkInNews
	err := configs.DB.
		Table("astrotalk_in_news").
		Where("isActive = ?", 1).
		Where("isDelete = ?", 0).
		Order("id DESC").
		Limit(10).
		Find(&news).Error
	return news, err
}

func GetAstrologyVideos() ([]homemodel.AstrologyVideo, error) {

	var videos []homemodel.AstrologyVideo

	err := configs.DB.
		Table("astrology_videos").
		Where("isActive = ?", 1).
		Where("isDelete = ?", 0).
		Order("id DESC").
		Limit(10).
		Find(&videos).Error

	return videos, err
}

func GetMySessions(userID uint) ([]dto.SessionResponse, error) {
	var sessions []dto.SessionResponse
	err := configs.DB.Table("chatrequest c").
		Select(`c.id, a.name as astrologer_name,
			a.profileImage as profile_image,
			DATE_FORMAT(c.created_at,'%d %b %Y') as date,
			'chat' as action_type `).
		Joins("JOIN astrologers a ON a.id=c.astrologerId").
		Where("c.userId=?", userID).
		Order("c.id desc").
		Limit(10).
		Scan(&sessions).Error
	return sessions, err
}


func GetHomeAstrologers() ([]dto.HomeAstrologerResponse, error) {
	var astrologers []dto.HomeAstrologerResponse
	err := configs.DB.Table("astrologers a").
		Select(`a.id, a.name, a.profileImage, 
			a.experienceInYears as experience,
			a.languageKnown as languages,
			a.allSkill as skills,
			a.charge,
			IFNULL(AVG(r.rating),0) as rating,
			a.totalOrder as total_orders`).
		Joins("LEFT JOIN user_reviews r ON r.astrologerId=a.id").
		Where("a.isActive=1").
		Group("a.id").
		Order("rating desc").
		Limit(10).
		Scan(&astrologers).Error
	return astrologers, err
}