package com.hepl.tunefortwo.service.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;



import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.audio.AudioParser;
import org.apache.tika.parser.mp3.LyricsHandler;
import org.apache.tika.parser.mp3.Mp3Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.springframework.stereotype.Service;

import com.hepl.tunefortwo.service.AudioService;

import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class AudioServiceImpl implements AudioService {
	   @Override
	    public double getAudioDuration(File file) {
	        try (InputStream stream = new FileInputStream(file)) {
	            Metadata metadata = new Metadata();
	            BodyContentHandler handler = new BodyContentHandler();
	            ParseContext pcontext = new ParseContext();
	            Mp3Parser  Mp3Parser = new  Mp3Parser();
	            Mp3Parser.parse(stream, handler, metadata, pcontext);
	            LyricsHandler lyrics = new LyricsHandler(stream,handler);
	            
	            while(lyrics.hasLyrics()) {
	          	  System.out.println(lyrics.toString());
	            }
	            System.out.println(	);
	            System.out.println("Contents of the document:" + handler.toString());
	            System.out.println("Metadata of the document:");
	            String[] metadataNames = metadata.names();
                String duration = metadata.get("xmpDM:duration");
                double dur = Double.parseDouble(duration);
                String secStr = String.valueOf(dur);
                double sec = dur/60;
                log.info(String.valueOf(dur/60));
	            for(String name : metadataNames) {		        
	          	  System.out.println(name + ": " + metadata.get(name));
	          	  
	            }
	            return dur;
	        } catch (Exception e) {
	            e.printStackTrace();
	            return 0.0;
	        }
	    }
}
