/*
 *========================================================================
 *
 *   시스템명 : 녹색교통 시스템
 *   파 일 명 : make_worker.c
 *   작 성 자 : 조보용 (baarong@neighbor21.co.kr)
 *   작 성 일 : 2019.08.30
 *   수 정 일 :
 *   설    명 :
 *
 *========================================================================
*/

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <iconv.h>

#include "wrkr_info.h"
#include "dir_path.h"
#include "file_no.h"
#include "file_lb.h"
#include "lb_func_list.h"
#include "func_list.h"
#include "util.h"

#define _INCTEST_ 1
/*
 *========================================================================
 *
 *   함 수 명 : make_worker
 *   작 성 자 : 조보용 (baarong@neighbor21.co.kr)
 *   작 성 일 : 2019.08.13
 *   수 정 일 :
 *   설    명 : 기초(정수)테이블 파일 생성
 *
 *========================================================================
*/
int make_worker(char *data)
{
    char path[128], spath[128], tpath[128];
#ifdef _INCTEST_
    char cpath[128];
#endif
    char mkData[MAX_STRING_SIZE*30];
    int  isfd, isrc, errflg = 0, nResult = 0, count = 0, total = 0;
    size_t in_size;
    size_t out_size;
    size_t out_buf_left;
    char   orgData[MAX_STRING_SIZE*30];
    char   szCarNo[255+1];
    char* in_buf;
    char* out_buf;

    memset(mkData, 0x00, sizeof(mkData));

    snprintf(mkData, strlen(data)+1, "%s", data);

//printf("make_befmst [%d][%s][%d]\n", rcv, data, strlen(data));
//printf("make_befmst 2[%s][%d]\n", mkData, strlen(mkData));

    //WriteLog(LogType_StandardOut, LogLevel_Info, "DATA[%s][%d]\n", mkData, strlen(mkData));
    sprintf(tpath, "%s/%s/WRKERTBL_O", DIR_TCS, DIR_BASEINFO);
    unlink(tpath);

    sprintf(path, "%s/%s/WRKERTBL", DIR_TCS, DIR_BASEINFO);
    lb_rename(path, tpath);
    sprintf(spath, "%s/%s/WRKERTBL_S", DIR_TCS, DIR_BASEINFO);
    unlink(spath);
#ifdef _INCTEST_
    // INCODING 확인 테스트
    sprintf(cpath, "%s/%s/WRKERTBL_C", DIR_TCS, DIR_BASEINFO);
    isfd=lb_build(cpath, FINOUT+FC_EXCLLOCK);
    if(isfd < 0)
    {
        WriteLog(LogType_StandardOut, LogLevel_Info, "WRKERTBL:파일생성 실패[%d]\n", isfd);
        isrc = -1;
        return(isrc);
    }
#endif
#if 1
//차로에서 수신 불가 인코딩 필수
    isrc = Write_File_Char(mkData, strlen(mkData), spath);
    if(isrc == 0)
    {
        WriteLog(LogType_StandardOut, LogLevel_Info, "WORKER DATA CREATE[%d]\n", isrc);
        //lb_rename(spath, path);
    }
#endif
#if 1
    struct wrkr_personal_info wrkr_tbl, wrkr_tbl_f;
    FILE *fp = NULL;
    int i = 0;
    fp = fopen(spath, "r+");
    WriteLog(LogType_StandardOut, LogLevel_Info, "TEST 근무자파일 읽기 시작\n");

    if(fp == NULL)
    {
        WriteLog(LogType_StandardOut, LogLevel_Info, "TEST 근무자파일 읽기 파일열기 실패\n");
    }else
    {
#ifdef _INCTEST_
        iconv_t ic = iconv_open("EUC-KR", "UTF-8");
        if(ic == (iconv_t) -1)
        {
            WriteLog(LogType_StandardOut, LogLevel_Info, "###### Not Supported ICONV Code ###### \n");
        }
#endif
        while (feof(fp) == 0)    // 파일 포인터가 파일의 끝이 아닐 때 계속 반복
        {
            count = fread(&wrkr_tbl, sizeof(struct wrkr_personal_info), 1, fp);    // 1바이트씩 4번(4바이트) 읽기
WriteLog(LogType_StandardOut, LogLevel_Info, "##### wrkr_no[%.4s]\n", wrkr_tbl.wrkr_no);
WriteLog(LogType_StandardOut, LogLevel_Info, "##### wrkr_nm[%.10s]\n", wrkr_tbl.wrkr_nm);
#ifdef _INCTEST_
            memset(mkData, 0x00, sizeof(mkData));
			memset(orgData, 0x00, sizeof(orgData));
			memset(&wrkr_tbl_f, 0x20, sizeof(wrkr_tbl_f));
            snprintf(orgData, strlen(wrkr_tbl.wrkr_no)+1, "%s", wrkr_tbl.wrkr_no);

            in_size = strlen(orgData);
            out_size = sizeof(orgData);
            in_buf = orgData;
            out_buf = mkData;
            out_buf_left = out_size;

            nResult = iconv(ic, (char *)&in_buf, &in_size, (char *)&out_buf, &out_buf_left);

            if(nResult == -1)
            {
                WriteLog(LogType_StandardOut, LogLevel_Info, "ICONV FAILED [%d][%d]\n", nResult, errno);
            }

			sprintf((char *)wrkr_tbl_f.wrkr_no, "%.4s", mkData);

            memset(mkData, 0x00, sizeof(mkData));
			memset(orgData, 0x00, sizeof(orgData));
            snprintf(orgData, strlen(wrkr_tbl.wrkr_nm)+1, "%s", wrkr_tbl.wrkr_nm);

            in_size = strlen(orgData);
            out_size = sizeof(orgData);
            in_buf = orgData;
            out_buf = mkData;
            out_buf_left = out_size;

            nResult = iconv(ic, (char *)&in_buf, &in_size, (char *)&out_buf, &out_buf_left);

            if(nResult == -1)
            {
                WriteLog(LogType_StandardOut, LogLevel_Info, "ICONV FAILED [%d][%d]\n", nResult, errno);
            }

			sprintf((char *)wrkr_tbl_f.wrkr_nm, "%.10s", mkData);
            isrc = lb_writel(isfd, &wrkr_tbl_f, sizeof(wrkr_tbl_f));
#endif
            total += count;
        }

WriteLog(LogType_StandardOut, LogLevel_Info, "------- END[%d] -------\n", total);
        iconv_close(ic);
		fclose(fp);
    }
	lb_rename(cpath, path);
	lb_close(isfd);
#endif
    return(isrc);
}
