package com.android.tvremoteime.server;

import android.content.Context;

import com.android.tvremoteime.AppPackagesHelper;
import java.util.Map;

import fi.iki.elonen.NanoHTTPD;

/**
 * Created by kingt on 2018/1/7.
 */

public class AppRequestProcesser implements RequestProcesser {
    private Context context;

    public AppRequestProcesser(Context context){
        this.context = context;
    }

    @Override
    public boolean isRequest(NanoHTTPD.IHTTPSession session, String fileName) {
        if(session.getMethod() == NanoHTTPD.Method.POST){
            switch (fileName) {
                case "/apps":
                case "/uninstall":
                case "/run":
                case "/runSystem":
                    return true;
            }
        }
        return false;
    }

    @Override
    public NanoHTTPD.Response doResponse(NanoHTTPD.IHTTPSession session, String fileName, Map<String, String> params, Map<String, String> files) {
            switch (fileName) {
                case "/apps":
                    return RemoteServer.createJSONResponse(NanoHTTPD.Response.Status.OK,
                            AppPackagesHelper.getQueryAppInfoJsonString(this.context, "true".equals(params.get("system"))));
                case "/uninstall":
                    if (params.get("packageName") != null) {
                        AppPackagesHelper.uninstallPackage(params.get("packageName"), this.context);
                    }
                    return RemoteServer.createPlainTextResponse(NanoHTTPD.Response.Status.OK,"ok");
                case "/run":
                    if (params.get("packageName") != null) {
                        AppPackagesHelper.runPackage(params.get("packageName"), this.context);
                    }
                    return RemoteServer.createPlainTextResponse(NanoHTTPD.Response.Status.OK,"ok");
                case "/runSystem":
                    if (params.get("packageName") != null) {
                        AppPackagesHelper.runSystemPackage(params.get("packageName"), this.context);
                    }
                    return RemoteServer.createPlainTextResponse(NanoHTTPD.Response.Status.OK,"ok");
                default:
                    return RemoteServer.createPlainTextResponse(NanoHTTPD.Response.Status.NOT_FOUND, "Error 404, file not found.");
            }
    }
}