package com.shuzijun.leetcode.plugin.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.impl.cookie.BasicClientCookie;

import java.net.HttpCookie;
import java.util.ArrayList;
import java.util.List;

/**
 * @author shuzijun
 */
public class CookieUtils {

    public static String toJSONString(List<BasicClientCookie> cookieList) {
        JSONArray jsonArray = new JSONArray();
        for (BasicClientCookie basicClientCookie : cookieList) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("name", basicClientCookie.getName());
            jsonObject.put("value", basicClientCookie.getValue());
            jsonObject.put("domain", basicClientCookie.getDomain());
            jsonObject.put("path", basicClientCookie.getPath());
            jsonArray.add(jsonObject);
        }
        return jsonArray.toJSONString();
    }

    public static String httpCookieToJSONString(List<HttpCookie> cookieList) {
        JSONArray jsonArray = new JSONArray();
        for (HttpCookie basicClientCookie : cookieList) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("name", basicClientCookie.getName());
            jsonObject.put("value", basicClientCookie.getValue());
            jsonObject.put("domain", basicClientCookie.getDomain());
            jsonObject.put("path", basicClientCookie.getPath());
            jsonArray.add(jsonObject);
        }
        return jsonArray.toJSONString();
    }

    public static List<BasicClientCookie> toCookie(String json) {

        List<BasicClientCookie> cookieList = new ArrayList<>();

        JSONArray jsonArray = JSONArray.parseArray(json);
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            BasicClientCookie clientCookie = new BasicClientCookie(jsonObject.getString("name"), jsonObject.getString("value"));
            clientCookie.setDomain(jsonObject.getString("domain"));
            clientCookie.setPath(jsonObject.getString("path"));
            cookieList.add(clientCookie);
        }

        return cookieList;
    }

    public static List<HttpCookie> toHttpCookie(String json) {

        List<HttpCookie> cookieList = new ArrayList<>();

        JSONArray jsonArray = JSONArray.parseArray(json);
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            HttpCookie clientCookie = new HttpCookie(jsonObject.getString("name"), jsonObject.getString("value"));
            clientCookie.setDomain(jsonObject.getString("domain"));
            clientCookie.setPath(jsonObject.getString("path"));
            clientCookie.setMaxAge(7 * 24 * 60);
            cookieList.add(clientCookie);
        }

        return cookieList;
    }

}