import os
import sys
import glob
import numpy as np
import pandas as pd
from tqdm import tqdm
import logging

from ClsFormProcessor import ClsFormProcessor

logger = logging.getLogger()
fh = logging.FileHandler('./log/RibFormProcessor.log',encoding='utf-8')
sh = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
fh.setFormatter(formatter)  
sh.setFormatter(formatter)

logger.addHandler(fh)   
logger.addHandler(sh)

logger.setLevel(10) 

class RibFormProcessor(ClsFormProcessor):
    def __init__(self,**kwargs):
        ClsFormProcessor.__init__(self,**kwargs)
        self.position_type_kw = u'骨折部位'    ##### target val is 3
        self.frac_flag_kw = u'是否骨折' ##### target val is 1
        self.keep_flag_kw = u'是否保留' ####### target val is 0
        self.target_organs = [3]

        
    def _getInfoMapDict(self):
        '''
        需要子类重写
        '''
        type_map_dict = {}
        for kw_before,kw_after in zip(self.type_kws,self.type_cor_kws):
            type_map_dict[kw_before] = kw_after
                     
        
        self.rename_dict = {
        self.task_id_kw:'task_id',
        self.uid_kw:'uid',
        self.data_kw:'data',
        self.position_type_kw:'organ',
        self.frac_flag_kw:'frac_flag',
        self.keep_flag_kw:'keep_flag'
        } 
        self.rename_dict.update(type_map_dict)
        ################# update kw related info
        
    def _FilterForm(self):
        print ('='*60)
        print (self.df.columns)
        self.df = self.df[(self.df[self.frac_flag_kw]==1)&(self.df[self.keep_flag_kw]==0)]
        self.df.reset_index(drop=True,inplace=True)
        
        logger.info('Number of records before filter %d '%(len(self.df)))
        self.df = self.df[self.df[self.position_type_kw].isin(self.target_organs)]
        self.df.reset_index(drop=True,inplace=True)
        logger.info('Number of records after filter %d '%(len(self.df)))
        

if __name__ == "__main__":

    paths = ['/fileser/zrx/Rib/infos/20201026/Rib_result_TASK_3813_3814_3815.csv']
    type_kws = [u'骨痂(v2)',u'骨折类型']
    type_cor_kws = ['poroma','frac_type']
    form_save_path = '/fileser/xupl/cls_data_preprocess/RibCls/label'
    uid_save_path = '/fileser/xupl/cls_data_preprocess/RibCls/info/uid'
    data_base_path = '/fileser/CT_RIB/data/image/res0/'
    folder_name = '20210107_test'
    iou_th = 0.0

    param_list = {
        'paths':paths,
        'type_kws':type_kws,
        'type_cor_kws':type_cor_kws,
        'form_save_path':form_save_path,
        'uid_save_path':uid_save_path,
        'data_base_path':data_base_path,
        'folder_name':folder_name,
        'iou_th':iou_th
    }

    processor = RibFormProcessor(**param_list)
    processor()