import * as Sequelize from 'sequelize';
import * as fs from 'fs';
import * as path from 'path';

const config = global['app_config'].ydn;

const basename = path.basename(module.filename);
const db: any = {};

const sequelize = new Sequelize(config.mysql_nami_db.database, config.mysql_nami_db.username
    , config.mysql_nami_db.password, config.mysql_nami_db);

fs.readdirSync(__dirname)
    .filter(function (file) {
        return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
    })
    .forEach(function (file) {
        var model = sequelize['import'](path.join(__dirname, file));
        db[model.name] = model;
    });

Object.keys(db).forEach(function (modelName) {
    if (db[modelName].associate) {
        db[modelName].associate(db);
    }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.db = sequelize;


const categories = sequelize.import("categories")
const coaches = sequelize.import("coaches")
const competition_rule = sequelize.import("competition_rule")
const competitions = sequelize.import("competitions")
const countries = sequelize.import("countries")
const honors = sequelize.import("honors")
const players = sequelize.import("players")
const referees = sequelize.import("referees")
const seasons = sequelize.import("seasons")
const stages = sequelize.import("stages")
const teams = sequelize.import("teams")
const venues = sequelize.import("venues")
const matches = sequelize.import("matches")
const player_stats = sequelize.import("player_stats")
const team_stats = sequelize.import("team_stats")
const season_rank = sequelize.import("season_rank")
const competition_point_rank = sequelize.import("competition_point_rank")
const match_history_compensation = sequelize.import("match_history_compensation");
const season_bracket_matches = sequelize.import("season_bracket_matches");
const competition_statistics_details = sequelize.import("competition_statistics_details");

const odds_asian_immediate = sequelize.import("odds_asian_immediate");
const odds_asian_roll_ball = sequelize.import("odds_asian_roll_ball");
const odds_big_small_immedicate = sequelize.import("odds_big_small_immedicate");
const odds_big_small_roll_ball = sequelize.import("odds_big_small_roll_ball");
const odds_european_immediate = sequelize.import("odds_european_immediate");
const odds_europe_roll_ball = sequelize.import("odds_europe_roll_ball");
const odds_corner_ball_immediate = sequelize.import("odds_corner_ball_immediate");
const odds_corner_roll_ball = sequelize.import("odds_corner_roll_ball");
const europe_companys = sequelize.import("europe_companys");
const odds_asian_history = sequelize.import("odds_asian_history");
const odds_europe_history = sequelize.import("odds_europe_history");
const odds_big_small_history = sequelize.import("odds_big_small_history");
const odds_corner_ball_history = sequelize.import("odds_corner_ball_history");
const season_ranks = sequelize.import("season_ranks")

// coache_history.ts
// coache_honors.ts
// intelligence.ts
// player_honors.ts
// player_transfer.ts
// season_best_lineup.ts
// team_honor.ts
// team_injury.ts
// team_rank_club.ts
// team_rank_fifa_men.ts
// team_rank_fifa_women.ts
// team_squad.ts
const coache_history = sequelize.import("coache_history");
const coache_honors = sequelize.import("coache_honors");
const intelligence = sequelize.import("intelligence");
const player_honors = sequelize.import("player_honors");
const player_transfer = sequelize.import("player_transfer");
const season_best_lineup = sequelize.import("season_best_lineup");
const team_honor = sequelize.import("team_honor");
const team_injury = sequelize.import("team_injury");
const team_rank_club = sequelize.import("team_rank_club");
const team_rank_fifa_men = sequelize.import("team_rank_fifa_men");
const team_rank_fifa_women = sequelize.import("team_rank_fifa_women");
const team_squad = sequelize.import("team_squad");

export {
    db,
    sequelize,
    Sequelize,

    categories,
    coaches,
    competition_rule,
    competitions,
    countries,
    honors,
    players,
    referees,
    seasons,
    stages,
    teams,
    venues,
    matches,
    player_stats,
    team_stats,
    season_rank,

    odds_asian_immediate,
    odds_asian_roll_ball,
    odds_big_small_immedicate,
    odds_big_small_roll_ball,
    odds_european_immediate,
    odds_europe_roll_ball,
    odds_corner_ball_immediate,
    odds_corner_roll_ball,
    odds_asian_history,
    odds_europe_history,
    odds_big_small_history,
    odds_corner_ball_history,
    europe_companys,
    season_ranks,
    competition_point_rank,
    match_history_compensation,
    season_bracket_matches,
    competition_statistics_details,

    coache_history,
    coache_honors,
    intelligence,
    player_honors,
    player_transfer,
    season_best_lineup,
    team_honor,
    team_injury,
    team_rank_club,
    team_rank_fifa_men,
    team_rank_fifa_women,
    team_squad,
}