/*
 *Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 *WSO2 Inc. licenses this file to you under the Apache License,
 *Version 2.0 (the "License"); you may not use this file except
 *in compliance with the License.
 *You may obtain a copy of the License at
 *
 *http://www.apache.org/licenses/LICENSE-2.0
 *
 *Unless required by applicable law or agreed to in writing,
 *software distributed under the License is distributed on an
 *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *KIND, either express or implied.  See the License for the
 *specific language governing permissions and limitations
 *under the License.
 */

package org.wso2.esb.integration.services.jaxrs.musicsample;

import org.wso2.esb.integration.services.jaxrs.musicsample.bean.Music;
import org.wso2.esb.integration.services.jaxrs.musicsample.bean.Singer;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/music")
public class MusicRestService {

    @Inject
    private MusicService musicService;

    @GET
    @Path("/get")
    @Produces(MediaType.APPLICATION_JSON)
    public Music getMusicInJSON(@QueryParam("album") final String albumName) {
        /*            Music music = new Music();
       music.setAlbum("Beat It !!!");
       music.setSinger("Micheal Jackson");*/

        return musicService.getByAlbum(albumName);
        //return musicService.musicCollection.get("Dimuthu");

    }

    @POST
    @Path("/post")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createMusicInJSONPOST(
            Music music /*@PathParam("album") String album, @PathParam("singer") String singer*/) {

        musicService.setMusic(music);

        String result = "Album Added in POST : " + music;
        return Response.status(201).entity(result).build();
        //return music.getAlbum();

    }

    @POST
    @Path("/postjson")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createMusicInJSONResponsePOST(
            Music music /*@PathParam("album") String album, @PathParam("singer") String singer*/) {

        musicService.setMusic(music);

        //String result = "Album Added in POST : " + music;
        return Response.status(201).entity(music).build();
        //return music.getAlbum();

    }

    @PUT
    @Path("/put")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response updateMusicInJSONPUT(Music music) {

        Music musicOne = musicService.getByAlbum(music.getAlbum());

        musicOne.setSinger(music.getSinger());

        String result = "Album updated form PUT request: " + musicOne;
        return Response.status(201).entity(result).build();
        //return music;

    }

    @POST
    @Path("/add_singer_details")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response addSingerDetailsInJSONPOST(Singer singer) {

        musicService.setSinger(singer);

        String result = "Singer Added in POST : " + singer;
        return Response.status(201).entity(result).build();
        //return music.getAlbum();

    }

    @GET
    @Path("/get_singer_details")
    @Produces(MediaType.APPLICATION_JSON)
    public Singer getSingerDetailsInJSON(@QueryParam("singer") final String singerName) {
        /*            Music music = new Music();
       music.setAlbum("Beat It !!!");
       music.setSinger("Micheal Jackson");*/

        return musicService.getBySinger(singerName);
        //return musicService.musicCollection.get("Dimuthu");

    }

}