import * as React from 'react';
import { Coordinate } from "./Coordinate";
import { Text, View } from './components/Themed';
import { StyleSheet } from 'react-native';

const styles = StyleSheet.create({
    tripText: {
     marginHorizontal: -10,
     marginVertical: 60,
     textAlign: 'center',
     width: "80%",
     fontSize: 12,
     fontWeight: 'bold',
    }});

class Chronometer {

    public display:string = "";
           clock:number   = 0;
           intervalID:any = null;
       
           tick()  {let hours:number   = 0, minutes:number = 0, seconds:number = 0;                   
                    this.clock++; 
                    hours   = this.clock < 3600 ? 0 : (this.clock / 3600);
                    minutes = this.clock < 60 ? 0 : (this.clock - (hours * 3600)) / 60;
                    seconds = this.clock % 60;
                    this.display = hours + ":" + minutes + ":" + seconds; 
                   }           
    public start() { this.clock = 0;
                     this.intervalID = setInterval(this.tick, 1000);                     
                   }
    public  resume() { this.intervalID = setInterval(this.tick, 1000); }               
    public  stop() { clearInterval(this.intervalID); }

}

export class GT2 {

           displayInterval:any   = null;
           clock:Chronometer     = new Chronometer();
           startPoint:Coordinate = new Coordinate(0,0);
    public distance:number       = 0.0;
           co2Rate:number        = 0.0;   
	       currTime:number       = 0;
           lastTime:number       = 0;
	       loc:Coordinate        = new Coordinate(0,0);
	public v:number              = 0;
    public inProgress:boolean    = false;
    public paused:boolean        = false;
    public elapsed:number        = 0.0;
           segments:number       = 1;

    public reset() {

        this.startPoint = new Coordinate(0,0);
        this.distance   = 0.0;
        this.co2Rate    = 0.0;   
        this.currTime   = 0;
        this.lastTime   = 0;
        this.loc        = new Coordinate(0,0);
        this.v          = 0;
        this.inProgress = false;
        this.paused     = false;
        this.elapsed    = 0.0;

    }

    public end()   {
        
        this.clock.stop();
        this.inProgress = false;
    
    }

    public pause() {
    
        this.clock.stop();
        this.paused = true;
    
    }

    public resume() {

        this.clock.start();
        this.paused = false;
    }

    public start() {

        this.clock.start();     
        this.inProgress = true;
    }
   

    public TripDisplay() {

    if (!thisTrip.inProgress) 
    return ( 
      <View>
        <Text style={styles.tripText}>
         {' No trip started yet.\n'}
        </Text>
      </View>);
    else     
    return (       
    <View>
      <Text style={styles.tripText}>
       {'Elapsed -   '}{this.clock.display}{'\n'}
       {'Geo:            '}{'lat: '}{this.loc.mLatitude}{' long: '}{this.loc.mLatitude}{'\n'}
       {'Vector:       '}{'distance: '}{this.distance}{' velocity: '}{this.v}{'\n'}
      </Text>
    </View>);
    }

}

export var thisTrip:GT2 = new GT2();
