import Box from '@/components/layout/Box'
import './AllRings.scss'
import { PageContainer, View, Text, Image } from '@tarojs/components'
import { useEffect, useState } from 'react'
import Modal from '@/components/layout/Modal.weapp'
import { rpxToPx } from '@/utils/tools'
import { ColorType } from '@/context/themes/color'
import Rings from "@/features/trackTimeDuration/components/Rings";
import { bigRingRadius, getBgRing, getCommon, getDot, ringWidth, smallRingRadius, thirdRingRadius } from '../trackTimeDuration/hooks/RingData'
import { RealRing } from '@/features/trackTimeDuration/components/Rings'
import { useSelector } from 'react-redux'
import { useTranslation } from 'react-i18next'
import { TimeFormatter } from '@/utils/time_format'
import '@/utils/ring_card.scss';
import DayNightRing from './DayNightRing'
// import GradientText from '@/components/basic/GradientText'
let sunriseA = new Date()
sunriseA.setHours(6)
sunriseA.setMinutes(0)
sunriseA.setSeconds(0)
sunriseA.setMilliseconds(0)
const sunsetA = new Date()
sunsetA.setHours(18)
sunsetA.setMinutes(0)
sunsetA.setSeconds(0)
sunsetA.setMilliseconds(0)
const sunriseB = new Date()
sunriseB.setHours(6)
sunriseB.setMinutes(0)
sunriseB.setSeconds(0)
sunriseB.setMilliseconds(0)
let GradientText
if (process.env.TARO_ENV == 'rn') {
GradientText = require('@/components/basic/GradientText').default
}
export default function AllDayRings(props: { schedule: any }) {
const [authInfo, setAuthInfo] = useState(global.locationDetail ? global.locationDetail : null)
const [showRing, setShowRing] = useState(false)
const user = useSelector((state: any) => state.user);
const ring = useSelector((state: any) => state.ring);
const [schedule] = useState(props.schedule)
const { t } = useTranslation()
useEffect(() => {
setAuthInfo(global.locationDetail)
}, [global.locationDetail])
global.tapShowDay = () => {
setShowRing(true)
}
function getFoodTime() {
if (ring.schedule) {
return [ring.schedule.fast.end_time, ring.schedule.fast.start_time]
}
var obj;
(schedule as any).map(item => {
if (item.name == 'FAST') {
obj = item
}
})
if (!obj) {
console.log('报错', schedule)
return ['16:00', '08:00'];
}
return [obj.schedule.fast.end_time, obj.schedule.fast.start_time]
}
function getActivityTime() {
if (ring.schedule) {
return [ring.schedule.sleep.end_time, ring.schedule.sleep.start_time]
}
var obj;
(schedule as any).map(item => {
if (item.name == 'SLEEP') {
obj = item
}
})
return [obj.schedule.sleep.end_time, obj.schedule.sleep.start_time]
}
function bigRing() {
var common = getCommon(null, true)
common.radius = bigRingRadius;
common.lineWidth = ringWidth;
var bgRing = getBgRing()
const targetRing: RealRing = {
color: (ring.current_record && ring.current_record.scenario == 'SLEEP') ? ColorType.activity + '66' : ColorType.food + '66',
startArc: 0,
durationArc: 2
}
var list = getFoodTime()
var start;
var end;
if (ring.current_record && ring.current_record.scenario == 'SLEEP') {
var list2 = getActivityTime()
start = parseInt(list2[0].split(':')[0]) * 60 + parseInt(list2[0].split(':')[1])
end = parseInt(list2[1].split(':')[0]) * 60 + parseInt(list2[1].split(':')[1])
if (ring.current_record.status != 'WAIT_FOR_START') {
var startDate = new Date(ring.current_record.sleep.target_start_time)
var endDate = new Date(ring.current_record.sleep.target_end_time)
end = startDate.getHours() * 60 + startDate.getMinutes()
start = endDate.getHours() * 60 + endDate.getMinutes()
}
}
else {
start = parseInt(list[0].split(':')[0]) * 60 + parseInt(list[0].split(':')[1])
end = parseInt(list[1].split(':')[0]) * 60 + parseInt(list[1].split(':')[1])
if (ring.current_record && ring.current_record.status != 'WAIT_FOR_START') {
var startDate = new Date(ring.current_record.fast.target_start_time)
var endDate = new Date(ring.current_record.fast.target_end_time)
end = startDate.getHours() * 60 + startDate.getMinutes()
start = endDate.getHours() * 60 + endDate.getMinutes()
}
}
if (end < start) {
end += 24 * 60
}
var duration = end - start
targetRing.startArc = (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0;
targetRing.durationArc = (duration * 60) / (24 * 3600) * 2 * Math.PI;
var currentDot = getDot(null, false)
var date = new Date()
var minutes = date.getHours() * 60 + date.getMinutes()
if (minutes < start) {
minutes += 1440
}
currentDot.color = ColorType.food
var now = new Date()
var t = now.getHours() * 60 + now.getMinutes()
var duration2 = t - start
if (duration2 < 0) {
duration2 += 24 * 60
}
let realRing: RealRing = {
color: ColorType.food,
startArc: (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0,
durationArc: (duration2 * 60) / (24 * 3600) * 2 * Math.PI
}
if (ring.current_record && ring.current_record.scenario == 'SLEEP') {
realRing.color = ColorType.activity
currentDot.color = ColorType.activity
}
if (!user.isLogin) {
currentDot = null
realRing = null
}
if (ring.current_record.status == 'ONGOING1') {
realRing = null
}
return
}
function smallRing() {
var common = getCommon(null, false)
common.radius = smallRingRadius;
common.lineWidth = ringWidth;
var bgRing = getBgRing()
const realRingBig: RealRing = {
color: ColorType.activity + '66',
startArc: 0,
durationArc: 2
}
var list = getActivityTime()
var start = parseInt(list[0].split(':')[0]) * 60 + parseInt(list[0].split(':')[1])
var end = parseInt(list[1].split(':')[0]) * 60 + parseInt(list[1].split(':')[1])
if (ring.current_record) {
if (ring.current_record.scenario == 'SLEEP') {
if (ring.current_record.status == 'ONGOING') {
var startDate = new Date(ring.current_record.sleep.target_start_time)
var endDate = new Date(ring.current_record.sleep.target_end_time)
end = startDate.getHours() * 60 + startDate.getMinutes()
start = endDate.getHours() * 60 + endDate.getMinutes()
}
}
else {
if (ring.current_record.status == 'ONGOING2') {
var startDate = new Date(ring.current_record.sleep.target_start_time)
var endDate = new Date(ring.current_record.sleep.target_end_time)
end = startDate.getHours() * 60 + startDate.getMinutes()
start = endDate.getHours() * 60 + endDate.getMinutes()
}
else if (ring.current_record.status == 'ONGOING3') {
//睡眠已完成时,睡眠小于24小时,使用真实的real_end_time-real_start_time
//大于24小时,使用real_end_time+sleep_duration
if (ring.current_record.sleep.real_end_time - ring.current_record.sleep.real_start_time < 24 * 3600 * 1000) {
var startDate = new Date(ring.current_record.sleep.real_start_time)
var endDate = new Date(ring.current_record.sleep.real_end_time)
end = startDate.getHours() * 60 + startDate.getMinutes()
start = endDate.getHours() * 60 + endDate.getMinutes()
}
else {
var startDate = new Date(ring.current_record.sleep.real_end_time)
var durationTemp = end - start//ring.current_record.sleep.target_end_time-ring.current_record.sleep.target_start_time
if (durationTemp < 0) {
durationTemp += 24 * 60
}
var endDate = new Date(startDate.getTime() + durationTemp * 60 * 1000)
start = startDate.getHours() * 60 + startDate.getMinutes()
end = endDate.getHours() * 60 + endDate.getMinutes()
}
}
}
}
if (end < start) {
end += 24 * 60
}
var duration = end - start
realRingBig.startArc = (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0;
realRingBig.durationArc = (duration * 60) / (24 * 3600) * 2 * Math.PI;
var currentDot = getDot(null, false)
var date = new Date()
var minutes = date.getHours() * 60 + date.getMinutes()
if (minutes < start) {
minutes += 1440
}
currentDot.color = ColorType.activity
var now = new Date()
var t = now.getHours() * 60 + now.getMinutes()
var duration2 = t - start
if (duration2 < 0) {
duration2 += 24 * 60
}
let realRing: RealRing = {
color: ColorType.activity,
startArc: (start * 60) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0,
durationArc: (duration2 * 60) / (24 * 3600) * 2 * Math.PI
}
if (!user.isLogin) {
currentDot = null
realRing = null
}
if (ring.current_record.status == 'ONGOING2') {
realRing = null
}
return
}
function dayRing() {
return
}
function rings() {
return
{
bigRing()
}
{
ring.current_record && ring.current_record.scenario == 'FAST_SLEEP' &&
{
smallRing()
}
}
{
{
dayRing()
}
}
}
function dayDuration() {
return global.sunriseDuration
}
function eatDuration() {
var list = getFoodTime()
var start = parseInt(list[0].split(':')[0]) * 60 + parseInt(list[0].split(':')[1])
var end = parseInt(list[1].split(':')[0]) * 60 + parseInt(list[1].split(':')[1])
if (ring.current_record && ring.current_record.status != 'WAIT_FOR_START' && ring.current_record.scenario != 'SLEEP') {
var startDate = new Date(ring.current_record.fast.target_start_time)
var endDate = new Date(ring.current_record.fast.target_end_time)
end = startDate.getHours() * 60 + startDate.getMinutes()
start = endDate.getHours() * 60 + endDate.getMinutes()
}
if (end < start) {
end += 24 * 60
}
var duration = (end - start) * 60 * 1000
return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration);
}
function activityDuration() {
var list = getActivityTime()
var start = parseInt(list[0].split(':')[0]) * 3600 + parseInt(list[0].split(':')[1]) * 60
var end = parseInt(list[1].split(':')[0]) * 3600 + parseInt(list[1].split(':')[1]) * 60
if (ring.current_record) {
if (ring.current_record.scenario == 'SLEEP') {
if (ring.current_record.status == 'ONGOING') {
var startDate = new Date(ring.current_record.sleep.target_start_time)
var endDate = new Date(ring.current_record.sleep.target_end_time)
end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds()
start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds()
}
}
else {
if (ring.current_record.status == 'ONGOING2') {
var startDate = new Date(ring.current_record.sleep.target_start_time)
var endDate = new Date(ring.current_record.sleep.target_end_time)
end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds()
start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds()
}
else if (ring.current_record.status == 'ONGOING3') {
//睡眠已完成时,睡眠小于24小时,使用真实的real_end_time-real_start_time
//大于24小时,使用real_end_time+sleep_duration
if (ring.current_record.sleep.real_end_time - ring.current_record.sleep.real_start_time < 24 * 3600 * 1000) {
var startDate = new Date(ring.current_record.sleep.real_start_time)
var endDate = new Date(ring.current_record.sleep.real_end_time)
end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds()
start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds()
}
else {
var startDate = new Date(ring.current_record.sleep.real_end_time)
var durationTemp = start - end//ring.current_record.sleep.target_end_time-ring.current_record.sleep.target_start_time
if (durationTemp < 0) {
durationTemp += 24 * 3600
}
var endDate = new Date(startDate.getTime() + durationTemp * 1000)
end = startDate.getHours() * 3600 + startDate.getMinutes() * 60 + startDate.getSeconds()
start = endDate.getHours() * 3600 + endDate.getMinutes() * 60 + endDate.getSeconds()
debugger
console.log('active', end, start, durationTemp)
}
}
}
}
if (end < start) {
end += 24 * 3600
}
var duration = (end - start) * 1000
return TimeFormatter.calculateTimeDifference(new Date().getTime(), new Date().getTime() + duration);
}
function popDetail() {
return
{
rings()
}
{t('feature.common.day')}
{dayDuration()}
{
ring.current_record && ring.current_record.scenario != 'SLEEP' && 进食
}
{
ring.current_record && ring.current_record.scenario != 'SLEEP' && {eatDuration()}
}
{
ring.current_record && ring.current_record.scenario != 'FAST' && 活动
}
{
ring.current_record && ring.current_record.scenario != 'FAST' && {activityDuration()}
}
}
function modalContent() {
return {
setShowRing(false)
}}
confirm={() => { }}>
{popDetail()}
}
return
{
showRing && modalContent()
}
// return
//
//
// {/* {t('feature.day_night.show_all_rings')} */}
// {
// process.env.TARO_ENV == 'weapp' ? {t('feature.day_night.show_all_rings')} :
// {t('feature.day_night.show_all_rings')}
// }
//
// {
// showRing && modalContent()
// }
//
}