import {useFocusEffect} from '@react-navigation/native'
import React, {useCallback, useMemo, useState} from 'react'
import {Dimensions, NativeModules, View} from 'react-native'
import {Button, Text, useTheme} from 'react-native-paper'
import {ProgressCircle} from 'react-native-svg-charts'
import {MARGIN, PADDING} from './constants'
import {settingsRepo} from './db'
import DrawerHeader from './DrawerHeader'
import MassiveFab from './MassiveFab'
import Settings from './settings'
import useTimer from './use-timer'

export interface TickEvent {
  minutes: string
  seconds: string
}

export default function TimerPage() {
  const {minutes, seconds} = useTimer()
  const [settings, setSettings] = useState<Settings>()
  const {colors} = useTheme()

  useFocusEffect(
    useCallback(() => {
      settingsRepo.findOne({where: {}}).then(setSettings)
    }, []),
  )

  const stop = () => {
    NativeModules.AlarmModule.stop()
  }

  const add = async () => {
    console.log(`${TimerPage.name}.add:`, settings)
    const params = [settings.vibrate, settings.sound, settings.noSound]
    NativeModules.AlarmModule.add(...params)
  }

  const progress = useMemo(() => {
    return (Number(minutes) * 60 + Number(seconds)) / 210
  }, [minutes, seconds])

  const left = useMemo(() => {
    return Dimensions.get('screen').width * 0.5 - 60
  }, [])

  return (
    <>
      <DrawerHeader name="Timer" />
      <View style={{flexGrow: 1, padding: PADDING}}>
        <View
          style={{
            flex: 1,
            justifyContent: 'center',
            alignItems: 'center',
          }}>
          <Text style={{fontSize: 70, position: 'absolute'}}>
            {minutes}:{seconds}
          </Text>
          <ProgressCircle
            style={{height: 300, width: 300, marginBottom: MARGIN}}
            progress={progress}
            strokeWidth={10}
            progressColor={colors.text}
            backgroundColor={colors.placeholder}
          />
        </View>
      </View>
      <Button onPress={add} style={{position: 'absolute', top: '82%', left}}>
        Add 1 min
      </Button>
      <MassiveFab icon="stop" onPress={stop} />
    </>
  )
}
