<?php

include_once 'DataManager.php';
include_once 'Track.php';
include_once 'Point.php';

// base class with member properties and methods
class TrackManager {

    function TrackManager() {
        
    }

    public function getAllTracksByUserIDInJson($paUserID) {
        $tracks = DataManager::getTracksByUserID($paUserID);
        $points = DataManager::getPointsByTrackID(1);
        //var_dump($points);
        $outputPointArray = array();
        $PoinysArray = array();
        $pom = 0;
        foreach ($points as $point) {
            $PoinysArray = array(
                'point_id' => $point['point_id'],
                'track_id' => $point['track_id'],
                //'point_datetime' => $point['point_datetime'],
                'point_latitude' => $point['point_latitude'],
                'point_longitude' => $point['point_longitude'],
                'point_altitude' => $point['point_altitude'],
                'point_speeed' => $point['point_speeed']
            );
            $outputPointArray["point" . $pom] = $PoinysArray;
            $pom++;
        }
        $outputArray = array();

        $pom = 0;
        foreach ($tracks as $track) {
            $rowArray;
            $rowArray = array(
                'track_id' => $track['track_id'],
                'user_id' => $track['user_id'],
                //'track_date' => $track['track_date'],
                'track_distance' => $track['track_distance'],
                'track_name' => $track['track_name'],
                'track_comment' => $track['track_comment'],
                'track_starttime' => $track['track_starttime'],
                'track_endtime' => $track['track_endtime'],
                'track_points' => $outputPointArray
            );

            $outputArray["track" . $pom] = $rowArray;
            $pom++;
            unset($rowArray);
        }

        return $outputArray;
    }

    public function getAllTracksByUserID($paUserID) {
        $tracks = DataManager::getTracksByUserID($paUserID);
        $outputArray = new ArrayObject();
        foreach ($tracks as $track) {
            $points = DataManager::getPointsByTrackID($track['track_id']);
            $outputArray2 = new ArrayObject();
            foreach ($points as $point) {
                $outputArray2->append(new Point($point['point_id'], $point['track_id'], $point['point_datetime']->format("Y-m-d H:i:s"), $point['point_latitude'], $point['point_longitude'], $point['point_altitude'], $point['point_speed']));
            }
            $outputArray->append(new Track($track['track_id'], $track['user_id'], $track['track_date']->format("Y-m-d"), $track['track_distance'], $track['track_name'], $track['track_comment'], $event['track_starttime'], $event['track_endtime'], $outputArray2));
        }
        return $outputArray;
    }

    /**
     * Metoda navrati instanciu trasy spolu so suradnicami trasy na zaklade ID trasy, ktore dostala parametrom
     * @param type $paTrackID
     * @return \Track
     */
    public function getTrackByID($paTrackID) {
        $tracks = DataManager::getTracksByID($paTrackID);
        $output;
        foreach ($tracks as $track) {
            $points = DataManager::getPointsByTrackID($track['track_id']);
            $outputArray2 = new ArrayObject();
            foreach ($points as $point) {
                $outputArray2->append(new Point($point['point_id'], $point['track_id'], $point['point_datetime']->format("Y-m-d H:i:s"), $point['point_latitude'], $point['point_longitude'], $point['point_altitude'], $point['point_speed']));
            }
            return ($output = new Track($track['track_id'], $track['user_id'], $track['track_date']->format("Y.m.d"), $track['track_distance'], $track['track_name'], $track['track_comment'], $track['track_starttime'], $track['track_endtime'], $outputArray2));
        }
        return (new Track("", "", "", "", "", "", "", "", null));
    }

    public function createTrack($user_id, $track_date, $track_distance, $track_name, $track_comment, $track_starttime, $track_endtime, $points) {
        $TrackId = DataManager::insertTrack($user_id, $track_date, $track_distance, $track_name, $track_comment, $track_starttime, $track_endtime);
        DataManager::__getConnection();
        foreach ($points as $track2) {
            $pointArray = array(
                'point_id' => $track2['point_id'],
                'track_id' => $TrackId,
                'point_datetime' => $track2['point_datetime'],
                'point_latitude' => $track2['point_latitude'],
                'point_longitude' => $track2['point_longitude'],
                'point_altitude' => $track2['point_altitude'],
                'point_speed' => $track2['point_speed']
            );
            
            DataManager::insertPoint($pointArray);
        }
    }
    
    

    public function getAllTracks($paUserID) {
        return 'not implemented yet';
    }

    public function getAllTracksInJson($paUserID) {
        return 'not implemented yet';
    }

    public function setTrackTitleAndCommentByID($trackID, $title, $comment) {
        DataManager::setTrackTitleAndCommentByID($trackID, $title, $comment);
    }

    public function setTrackComment($paTrackID) {
        return 'not implemented yet';
    }

    public function DeleteTrack($paTrackID) {
        DataManager::deleteTrack($paTrackID);
    }

    public function getTracksDistance() {
        return 'not implemented yet';
    }

    public function getTracksDistanceByUser($paUserID) {
        return 'not implemented yet';
    }

}

?>