SET @TABLE_NAME = 'FC_INV';

SELECT 
CONCAT(
'using Dapper;\n'
,'using System;\n'
,'using System.Data;\n'
,'using static SmartInterface.Repository.DB.DBModel.Common;\n'

,'\n'

,'namespace SmartInterface.Repository.DB.DBModel.Tables\n'
,'{\n'


,'public class ', @TABLE_NAME, ' : IModel'
,'{\n'


,(
SELECT 
GROUP_CONCAT(
   CONCAT('public ',
         CASE DATA_TYPE
            WHEN 'varchar' THEN 'string'
            WHEN 'timestamp' THEN 'DateTime?'
            WHEN 'datetime' THEN 'DateTime?'
            WHEN 'float' THEN 'double?'
            WHEN 'longtext' THEN 'string'
            WHEN 'tinyint' THEN 'int?'
            WHEN 'smallint' THEN 'int?'
            WHEN 'int' THEN 'int?'
            WHEN 'double' THEN 'double?'
         ELSE DATA_TYPE END , 
         ' ' , 
         REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'did','id'),'facility_id','id'),'localtime','dblocaltime') ,
         ' {get;set;}'
   )
   SEPARATOR '\n'
)
FROM INFORMATION_SCHEMA.`COLUMNS`
WHERE TABLE_SCHEMA='renew_energy'
AND TABLE_NAME = @TABLE_NAME
)
,'\n\n'


#################################################################################################################
############# Method
#################################################################################################################

,'public DBProcessParams GenerateParameters<T>(T model) where T : class\n'
,'{\n'
,@TABLE_NAME,' table = model as ',@TABLE_NAME,';\n'
,'DBProcessParams dbParams = new DBProcessParams();\n\n'
,'var insertParams = new DynamicParameters();\n'
,'var updateParams = new DynamicParameters();\n\n'
,(
SELECT 
GROUP_CONCAT(
CONCAT(
'insertParams.Add(\"'
,'@',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'localtime','dblocaltime'),'did','id'),'did','id'),'facility_id','id')
,'\", '
,'table.'
,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'localtime','dblocaltime'),'did','id'),'facility_id','id')
,', '
,'DbType.'
,CASE DATA_TYPE
WHEN 'varchar' THEN 'String'
WHEN 'timestamp' THEN 'DateTime'
WHEN 'datetime' THEN 'DateTime'
WHEN 'float' THEN 'Double'
WHEN 'longtext' THEN 'String'
WHEN 'tinyint' THEN 'Int32'
WHEN 'smallint' THEN 'Int32'
WHEN 'int' THEN 'Int32'
ELSE DATA_TYPE END 
,', ParameterDirection.Input'
,', 200);'
)
SEPARATOR '\n'
)
FROM INFORMATION_SCHEMA.`COLUMNS`
WHERE TABLE_SCHEMA = 'renew_energy'
AND TABLE_NAME = @TABLE_NAME
AND COLUMN_NAME NOT IN ('missed_yn', 'send_date', 'send_yn')
)
,'\n\n'
,(
SELECT 
GROUP_CONCAT(
CONCAT(
'updateParams.Add(\"'
,'@',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'localtime','dblocaltime'),'did','id'),'did','id'),'facility_id','id')
,'\", '
,'table.'
,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'localtime','dblocaltime'),'did','id'),'facility_id','id')
,', '
,'DbType.'
,CASE DATA_TYPE
WHEN 'varchar' THEN 'String'
WHEN 'timestamp' THEN 'DateTime'
WHEN 'datetime' THEN 'DateTime'
WHEN 'float' THEN 'Double'
WHEN 'longtext' THEN 'String'
WHEN 'tinyint' THEN 'Int32'
WHEN 'smallint' THEN 'Int32'
WHEN 'int' THEN 'Int32'
ELSE DATA_TYPE END 
,', ParameterDirection.Input'
,', 200);'
)
SEPARATOR '\n'
)
FROM INFORMATION_SCHEMA.`COLUMNS`
WHERE TABLE_SCHEMA = 'renew_energy'
AND TABLE_NAME = @TABLE_NAME
AND COLUMN_NAME IN ('timestamp', 'facility_id', 'did')
)
,'\n\n'
,'dbParams.InsertParams = insertParams;'
,'\n'
,'dbParams.UpdateParams = updateParams;'
,'\n\nreturn dbParams;'
,'\n}'
,'\n'


,'string IModel.Select() => Select();'
,'\n'


,'string IModel.Insert() => Insert();'
,'\n'


,'string IModel.Update() => Update();'
,'\n'


#################################################################################################################
############# Select Query
#################################################################################################################

,'\n\npublic static string Select()\n'
,'{\n'
,'string query = $@\"\n'
,'\t\t\t\t\t\t\t'
'SELECT ',
(
SELECT 
GROUP_CONCAT(
CONCAT(
'\n\t\t\t\t\t\t\t\t', 
'`',COLUMN_NAME,'`',
CASE COLUMN_NAME 
WHEN 'did' THEN ' id'
WHEN 'facility_id' THEN ' id'
ELSE CONCAT(' `{nameof(',REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'localtime','dblocaltime'),')}`')
END

SEPARATOR ',')
FROM INFORMATION_SCHEMA.`COLUMNS`
WHERE TABLE_SCHEMA='renew_energy'
AND TABLE_NAME = @TABLE_NAME
),
'\n\t\t\t\t\t\t\t FROM ',
@TABLE_NAME,
' \n\t\t\t\t\t\t\tWHERE IFNULL(send_yn,''N'') = ''N'' ',
'\n\t\t\t\t\t\t\tORDER BY timestamp'
,'\n\t\t\t\t\t\t\t\";'
,'\nreturn query;'
,'\n}'


#################################################################################################################
############# Update Query
#################################################################################################################
,'\n\npublic static string Update()\n'
,'{\n'
,'string query = $@\"\n'
,'\t\t\t\t\t\t\t'
,'UPDATE '
,@TABLE_NAME
,'\n\t\t\t\t\t\t\t'
,' SET SEND_YN = ''#SEND_YN#'''
,'\n\t\t\t\t\t\t\t\t'
,',SEND_DATE = NOW() '
,'\n\t\t\t\t\t\t\t'
,'WHERE '
,(
SELECT 
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @TABLE_NAME 
AND TABLE_SCHEMA = 'renew_energy'
AND COLUMN_NAME IN ('facility_id','did')
)
,' = @id '
,'\n\t\t\t\t\t\t\t'
,'AND timestamp = @timestamp'
,'\n\t\t\t\t\t\t\t'
,'\";'
,'\nreturn query;'
,'\n}'


#################################################################################################################
############# Insert Query
#################################################################################################################
,'\n\npublic static string Insert()'
,'\n{'
,'\nstring query = $@\"\n'
,'\t\t\t\t\t\t\t'
,'INSERT INTO '
,@TABLE_NAME
,'\n\t\t\t\t\t\t\t'
,'(\n'
,(
SELECT
   GROUP_CONCAT(
CONCAT(
'\t\t\t\t\t\t\t\t','`',COLUMN_NAME,'`'

SEPARATOR ',\n ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'renew_energy'
AND TABLE_NAME = @TABLE_NAME
AND COLUMN_NAME NOT IN ('missed_yn', 'send_date', 'send_yn')
)
,'\n\t\t\t\t\t\t\t'
,')\n'
,'\t\t\t\t\t\t\t'
,'VALUES '
,'\n\t\t\t\t\t\t\t'
,'(\n'
,(
SELECT
   GROUP_CONCAT(
CONCAT(
'\t\t\t\t\t\t\t\t@',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'-','_'),'&','_AND_'),'localtime','dblocaltime'),'did','id'),'did','id'),'facility_id','id')

SEPARATOR ',\n ')
   
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'renew_energy'
AND TABLE_NAME = @TABLE_NAME
AND COLUMN_NAME NOT IN ('missed_yn', 'send_date', 'send_yn')
)
,'\n'
,'\t\t\t\t\t\t\t)'
,'\n\t\t\t\t\t\t\t\";'
,'\nreturn query;'
,'\n}'
,'\n}'
,'\n}'
);