# 1. 조회
# invest_id=228 인 투자자가 투자한 포트폴리오를 모두 조회한다
# PK=228, SK=portfolio#
import boto3
import json
import decimal
from elasticsearch import Elasticsearch
import json

# elastic 연결
cloud_id = 'univ=============================='
username = 'e==========='
password = 'wNl==========='

dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2')
table = dynamodb.Table('LUCK4_INNOFOREST_DB')
# response = table.scan()

for x in range(0,338): # invest_id를 차례로 조회한다
    # 쿼리 조건 설정
    partition_key_value = str(x)
    sort_key_prefix = 'portfolio#'
    # 쿼리 실행
    response = table.query(
        KeyConditionExpression="#pk = :pkval AND begins_with(#sk, :skval)",
        ExpressionAttributeNames={
            "#pk": "invest_id",
            "#sk": "sort_key"
        },
        ExpressionAttributeValues={
            ":pkval": partition_key_value,
            ":skval": sort_key_prefix
        }
    )

    # 빈 딕셔너리 
    preferstages={
        'seed':0,
        'pre-A':0,
        'pre-B':0,
        'series A':0,
        'series B':0,
        'series C':0,
        'series D':0,
        'series E':0,
        'series F':0,
        'series G':0,
        'pre-IPO':0,
        'M&A':0,
        '지원금':0,
        '기타':0,
        '주식양수도':0,
        '비공개':0
    }
    # 가져온 데이터 확인
    items = response.get('Items', [])
    # print(items)
    
    # ** 같은 회사에 중복 횟수 세기
    invest_again_count=0
    invest_count=0

    
    for item in items: # 조회된 여러개의 portfolio를 순차적으로 확인한다
        # print(item)
        investor_name=item['투자사 이름']
        # 문자열에서 '[', ']' 제거하고 공백 기준으로 분할하여 리스트로 변환
        invest_stages_str = item['투자 단계'].strip('[]')
        invest_stages_list = [stage.strip("'") for stage in invest_stages_str.split(", ")]
        
        # 문자열에서 '[', ']' 제거하고 공백 기준으로 분할하여 리스트로 변환
        invest_dates_str = item['투자일'].strip('[]')
        invest_dates_list = [stage.strip("'") for stage in invest_dates_str.split(", ")]
        
        # print(invest_stages_list)
        # print(invest_dates_list)
        invest_count+=1
        if(len(invest_stages_list)==2):
            invest_again_count+=2
        

        for i in range(len(invest_stages_list)):
            stage_name= invest_stages_list[i].replace(" (추정)","")# 전처리와 stage 조회
            year=int(invest_dates_list[i][2:4])
            day=int(invest_dates_list[i][5:7])
            preferstages[stage_name]+=year*day # update
            
    
    if(invest_count==0):
        mbti_3=0
    else:
        mbti_3=invest_again_count/invest_count
    # print(preferstages) 
    
    item1={
        # 'invest_id': str(x),  # 'ID'는 DynamoDB 테이블의 기본 키(primary key)입니다.
        # 'sort_key':"preferstages#"+investor_name,
        # '투자사 이름':investor_name,
        'seed':preferstages['seed'],
        'pre-A':preferstages['pre-A'],
        'pre-B':preferstages['pre-B'],
        'pre-all':int(preferstages['pre-A'])+int(preferstages['pre-B']),
        'series A':preferstages['series A'],
        'series B':preferstages['series B'],
        'series C':preferstages['series C'],
        'series A-C':int(preferstages['series A'])+int(preferstages['series B'])+int(preferstages['series C']),
        'series D':preferstages['series D'],
        'series E':preferstages['series E'],
        'series F':preferstages['series F'],
        'series G':preferstages['series G'],
        'series D-G':int(preferstages['series D'])+int(preferstages['series E'])+int(preferstages['series F'])+int(preferstages['series G']),
        'pre-IPO':preferstages['pre-IPO'],
        'M&A':preferstages['M&A'],
        '지원금':preferstages['지원금'],
        '기타':preferstages['기타'],
        '주식양수도':preferstages['주식양수도'],
        '비공개':preferstages['비공개'],
        'extra-all':int(preferstages['지원금'])+int(preferstages['기타'])+int(preferstages['주식양수도'])+int(preferstages['비공개'])
    }
    # table.put_item(Item=item1)
    print(item1)
    
    # mbti는 별도로 sort key 설정
    
    item2={
        'invest_id':investor_name,
        'sort_key':"mbti#"+str(x),
        '투자사 이름':investor_name,
        'MBTI_1':item1,
        'MBTI_3':decimal.Decimal(str(mbti_3))
    }
    
    
    print(item2)
    # table.put_item(Item=item2)
    
    es = Elasticsearch(
        cloud_id=cloud_id,
        basic_auth=(username, password),
    )
    es.index(index='luck4_investor_mbti', id=str(x), document=item2)
    # break