// // SeriesDetailIntroductionView.swift // SodaLive // // Created by klaus on 4/29/24. // import SwiftUI import TagLayoutView struct SeriesDetailIntroductionView: View { let width: CGFloat let seriesDetail: GetSeriesDetailResponse var body: some View { VStack(alignment: .leading, spacing: 16) { Text("키워드") .font(.custom(Font.bold.rawValue, size: 14.7)) .foregroundColor(Color.grayee) .padding(.top, 16) .padding(.horizontal, 13.3) TagLayoutView( seriesDetail.keywordList, tagFont: UIFont(name: Font.medium.rawValue, size: 12)!, padding: 5.3, parentWidth: width ) { SeriesKeywordChipView(keyword: $0) } .padding(.horizontal, 13.3) Rectangle() .frame(height: 6.7) .foregroundColor(Color.gray22) VStack(alignment: .leading, spacing: 13.3) { Text("작품소개") .font(.custom(Font.bold.rawValue, size: 14.7)) .foregroundColor(Color.grayee) Text(seriesDetail.introduction) .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) .lineSpacing(4) } .padding(.horizontal, 13.3) Rectangle() .frame(height: 6.7) .foregroundColor(Color.gray22) VStack(alignment: .leading, spacing: 16) { Text("상세정보") .font(.custom(Font.bold.rawValue, size: 14.7)) .foregroundColor(Color.grayee) HStack(spacing: 30) { VStack(alignment: .leading, spacing: 13.3) { Text("장르") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) Text("연령제한") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) if let _ = seriesDetail.writer { Text("작가") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) } if let _ = seriesDetail.studio { Text("제작사") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) } Text("연재") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) Text("출시일") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) } VStack(alignment: .leading, spacing: 13.3) { Text(seriesDetail.genre) .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.white) Text(seriesDetail.isAdult ? "19세 이상" : "전체연령가") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.white) if let writer = seriesDetail.writer { Text(writer) .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.white) } if let studio = seriesDetail.studio { Text(studio) .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.white) } Text(seriesDetail.publishedDaysOfWeek == "랜덤" ? seriesDetail.publishedDaysOfWeek : "\(seriesDetail.publishedDaysOfWeek)요일") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.white) Text(seriesDetail.publishedDate) .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.white) } } } .padding(.horizontal, 13.3) VStack(alignment: .leading, spacing: 13.3) { Text("가격") .font(.custom(Font.bold.rawValue, size: 14.7)) .foregroundColor(Color.grayee) HStack(spacing: 30) { VStack(alignment: .leading, spacing: 13.3) { Text("대여") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) Text("소장") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.gray77) } VStack(alignment: .leading, spacing: 13.3) { Text("\(calculatePriceInfo(seriesDetail.rentalMinPrice, seriesDetail.rentalMaxPrice)) (15일)") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.button) Text("\(calculatePriceInfo(seriesDetail.minPrice, seriesDetail.maxPrice))") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color.button) } } } .padding(.horizontal, 13.3) } } func calculatePriceInfo(_ minPrice: Int, _ maxPrice: Int) -> String { if minPrice == maxPrice { if maxPrice == 0 { return "무료" } else { return "\(maxPrice)" } } else { return "\(minPrice == 0 ? "무료" : "\(minPrice)") ~ \(maxPrice)캔" } } }