package architecture.studio.services;
import java.util.List;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

import com.oracle.bmc.objectstorage.ObjectStorage;
import com.oracle.bmc.objectstorage.model.ObjectSummary;
import com.oracle.bmc.objectstorage.requests.GetObjectRequest;
import com.oracle.bmc.objectstorage.requests.ListObjectsRequest;
import com.oracle.bmc.objectstorage.responses.GetObjectResponse;
import com.oracle.bmc.objectstorage.responses.ListObjectsResponse;

import architecture.studio.services.spring.config.oci.OciClientConfig;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest(classes=architecture.studio.services.spring.config.oci.OciClientConfig.class)
public class TestOciClient {
    
    @Autowired
    @Qualifier(OciClientConfig.SERVICE_NAME)
    ObjectStorage client;

    
    @Test
    public void test() throws Exception {
        // OCI Object Storage client check.
        log.info("oci : {}" , client );

        /*  you can find namespace in your bucket details page under 
        Bucket information in OCI console */
        String namespaceName = "<namespace name>";
        // 버킷 이름 설정
        String bucketName =  "<bucket name>";

        // 객체 목록 조회
        ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder()
                        .namespaceName(namespaceName)
                        .bucketName(bucketName)
                        .build();
        ListObjectsResponse listObjectsResponse = client.listObjects(listObjectsRequest);
        List<ObjectSummary> objectSummaries = listObjectsResponse.getListObjects().getObjects();
        // 조회된 객체 목록 출력
        for (ObjectSummary objectSummary : objectSummaries) {
            
            log.debug("Object: {}, {}", objectSummary.getName(), objectSummary);
            GetObjectResponse objectDetails = getObject(namespaceName, bucketName, objectSummary.getName());
            log.debug("Object : {}", objectDetails );
        }
    }

    public GetObjectResponse getObject(String namespaceName, String bucketName, String objectName){
        GetObjectRequest getObjectRequest = GetObjectRequest.builder()
        .namespaceName(namespaceName)
        .bucketName(bucketName)
        .objectName(objectName).build();
        return client.getObject(getObjectRequest);
    }
}