/*
shottower
Copyright (C) 2022 RÃ©my Boulanouar

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
/*
 * Shottower
 *
 * Shottower is the open source version of Shotstack which is a video, image and audio editing service that allows for the automated generation of videos, images and audio using JSON and a RESTful API.  You arrange and configure an edit and POST it to the API which will render your media and provide a file  location when complete.  For more details visit [shottower](https://github.com/DblK/shottower) or checkout our [getting started](https://shotstack.io/docs/guide/) documentation.  There are two main API's, one for editing and generating assets (Edit API) and one for managing hosted assets (Serve API).  The Edit API base URL is: <b>http://0.0.0.0:4000/{version}</b>  The Serve API base URL is: <b>http://0.0.0.0:4000/serve/{version}</b>
 *
 * API version: stage
 * Generated by: OpenAPI Generator (https://openapi-generator.tech)
 */

package openapi

import (
	"context"
	"errors"
	"net/http"

	"github.com/DblK/shottower/config"
)

// ServeAPIService is a service that implements the logic for the ServeAPIServicer
// This service should implement the business logic for every endpoint for the ServeApi API.
// Include any external packages or services that will be required by this service.
type ServeAPIService struct {
	config config.ShottowerConfiguration
}

// NewServeAPIService creates a default api service
func NewServeAPIService(cfg config.ShottowerConfiguration) ServeAPIServicer {
	return &ServeAPIService{
		config: cfg,
	}
}

// DeleteAsset - Delete Asset
func (s *ServeAPIService) DeleteAsset(ctx context.Context, id string) (ImplResponse, error) {
	// TODO - update DeleteAsset with the required logic for this service method.
	// Add api_serve_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation.

	//TODO: Uncomment the next line to return response Response(204, {}) or use other options such as http.Ok ...
	//return Response(204, nil),nil

	return Response(http.StatusNotImplemented, nil), errors.New("DeleteAsset method not implemented")
}

// GetAsset - Get Asset
func (s *ServeAPIService) GetAsset(ctx context.Context, id string) (ImplResponse, error) {
	// TODO - update GetAsset with the required logic for this service method.
	// Add api_serve_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation.

	//TODO: Uncomment the next line to return response Response(200, AssetResponse{}) or use other options such as http.Ok ...
	//return Response(200, AssetResponse{}), nil

	// {
	// 	"success": false,
	// 	"message": "Not found",
	// 	"response": "The resource GET /stage/assets/b3c6c52d-c90a-4f6b-bfae-364b92b471c9 does not exist, check the method type (POST, GET) and URL. API Reference Docs: https://shotstack.io/docs/api/"
	//   }

	return Response(http.StatusNotImplemented, nil), errors.New("GetAsset method not implemented")
}

// GetAssetByRenderID - Get Asset by Render ID
func (s *ServeAPIService) GetAssetByRenderID(ctx context.Context, id string) (ImplResponse, error) {
	// TODO - update GetAssetByRenderID with the required logic for this service method.
	// Add api_serve_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation.

	//TODO: Uncomment the next line to return response Response(200, AssetRenderResponse{}) or use other options such as http.Ok ...
	//return Response(200, AssetRenderResponse{}), nil

	return Response(http.StatusNotImplemented, nil), errors.New("GetAssetByRenderID method not implemented")
}
