package com.infinite.focus.server.moods;

import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;

import com.infinite.focus.server.auth.AuthenticationController;
import com.infinite.focus.server.auth.Message;
import com.infinite.focus.server.auth.SecurityConstants;
import com.infinite.focus.server.contents.Content;

@CrossOrigin(origins = "http://localhost:8383")
@RestController
@RequestMapping("api/mood")

public class MoodController {
	
	@Value("${app.api-base-url}")
	private String apiBaseUrl;

	@Autowired
	MoodRepository moodRepository;

	public MoodController() {

	}

	@PostMapping("/fill-mood-data")
	@ResponseBody
	public ResponseEntity<List<Mood>> fillMoodData(@RequestHeader(SecurityConstants.HEADER_STRING) String token) {

		AuthenticationController.isAuthenticated(token);

		return new ResponseEntity<List<Mood>>(moodRepository.saveAll(getMoodList()), HttpStatus.OK);

	}

	@PostMapping("/create/mood")
	@ResponseBody
	public ResponseEntity<Mood> createMood(@RequestHeader(SecurityConstants.HEADER_STRING) String token,
			@RequestBody Mood request) {

		AuthenticationController.isAuthenticated(token);

		return new ResponseEntity<Mood>(moodRepository.save(request), HttpStatus.OK);

	}

	@PostMapping("/update/mood")
	@ResponseBody
	public ResponseEntity<Mood> updateMood(@RequestHeader(SecurityConstants.HEADER_STRING) String token, @RequestBody Mood request) {

		AuthenticationController.isAuthenticated(token);
		
		Mood mood = moodRepository.getOne(request.getMood_id());
		mood.setAnimated_image(request.getAnimated_image());
		mood.setImage(request.getImage());
		mood.setMood(request.getMood());
		mood.setWeight(request.getWeight());
		mood.setCreatedAt(mood.getCreatedAt());
		mood.setUpdateAt(new Date());
		
		return new ResponseEntity<Mood>(moodRepository.save(mood), HttpStatus.OK);
	}
	
	@DeleteMapping("/delete/mood/{mood_id}")
	public ResponseEntity<Message> deleteMood(@RequestHeader(SecurityConstants.HEADER_STRING) String token, @PathVariable(value = "mood_id") Long mood_id) {

		AuthenticationController.isAuthenticated(token);
		
		Mood content = moodRepository.getOne(mood_id);
		
		if(content == null) {
			throw new ResponseStatusException(HttpStatus.NOT_FOUND, "The Mood not found!");
		}
		
		moodRepository.deleteById(mood_id);

		Message message = new Message();
		message.setMessage("The Mood is deleted successfully.");
		
		return new ResponseEntity<Message>(message, HttpStatus.OK);
	}
	
	public LinkedList<Mood> getMoodList() {

		LinkedList<Mood> moods = new LinkedList<Mood>();
		
		Mood mood = new Mood();
		mood.setMood("Sad");
		mood.setWeight(8.3);
		mood.setAnimated_image(apiBaseUrl + "/images/gifs/Sad.gif");
		moods.add(mood);

		Mood mood2 = new Mood();
		mood2.setMood("Angry");
		mood2.setWeight(8.3);
		mood2.setAnimated_image(apiBaseUrl + "/images/gifs/Angry.gif");
		moods.add(mood2);
		
		Mood mood3 = new Mood();
		mood3.setMood("Scared");
		mood3.setWeight(8.3);
		mood3.setAnimated_image(apiBaseUrl + "/images/gifs/Scared.gif");
		moods.add(mood3);
		
		Mood mood4 = new Mood();
		mood4.setMood("Meh");
		mood4.setWeight(16.6);
		mood4.setAnimated_image(apiBaseUrl + "/images/gifs/Meh.gif");
		moods.add(mood4);
		
		Mood mood5 = new Mood();
		mood5.setMood("Shy");
		mood5.setWeight(16.6);
		mood5.setAnimated_image(apiBaseUrl + "/images/gifs/Shy.gif");
		moods.add(mood5);
		
		Mood mood6 = new Mood();
		mood6.setMood("Unmotivated");
		mood6.setWeight(16.6);
		mood6.setAnimated_image(apiBaseUrl + "/images/gifs/Unmotivated.gif");
		moods.add(mood6);
		
		Mood mood7 = new Mood();
		mood7.setMood("Happy");
		mood7.setWeight(25);
		mood7.setAnimated_image(apiBaseUrl + "/images/gifs/Happy.gif");

		moods.add(mood7);
		
		Mood mood8 = new Mood();
		mood8.setMood("Exited");
		mood8.setWeight(25);
		mood8.setAnimated_image(apiBaseUrl + "/images/gifs/Exited.gif");
		moods.add(mood8);
		
		Mood mood9 = new Mood();
		mood9.setMood("Hopeful");
		mood9.setWeight(25);
		mood9.setAnimated_image(apiBaseUrl + "/images/gifs/Hopeful.gif");
		moods.add(mood9);
		
		return moods;
	}
}