﻿AG.Data.Industry = {
    GetMASIndex: function () {
        return AG.ClientAPI.createData(IndustryRealtime, 'MASIndex', [{ Code: 'MAS_Top_100' }, { Code: 'MAS_Composite'}], { static: ['Id', 'Name', 'Code', 'ClosePrice'], dynamic: ['Diff', 'DiffPercent'] }, undefined, undefined, undefined, 0, 60000);
    },
    GetCompetitor: function (industryId) {

        var requestName = 'GetCompetitor' + '_' + industryId;
        return AG.ClientAPI.createData(IndustryRealtime, requestName, [{ Id: industryId}], { static: ['Name', 'ClosePrice'], dynamic: ['ROALTM', 'ROELTM', 'PE', 'MarketCapitalization', 'EVLFI', 'LongtermDebtTotalEquityLFI', 'LongtermDebtTotalAssetsLFI', 'TotalDebtTotalEquityLFI', 'EBITDALFI', 'PB', 'PS', 'ProfitMarginLFI'] });
        requestName = null;
    },
    GetListStockExchangeAndIndustry: function (stockExchangeId, industryId, startIndex, endIndex, orderBy, orderType) {
        var data = [{ StartIndex: startIndex }, { EndIndex: endIndex}];
        if (typeof (stockExchangeId) != 'undefined')
            data.push({ StockExchange: stockExchangeId });
        if (typeof (orderBy) == 'undefined') orderBy = "Code";
        if (typeof (orderType) == 'undefined') orderType = "ASC";
        var filter = [{ Field: 'Industry', Type: 'Static', Index: 0, Operator: '=', Value: industryId}];
        var requestName = 'GetListStockExchangeAndIndustry_NoLanguage' + stockExchangeId + industryId + startIndex + endIndex + orderBy + orderType;
        return AG.ClientAPI.createData(CompanyRealtime, requestName, data, { static: ['Id', 'Code', 'ClosePrice', 'DiffPercent', 'TotalShare', 'PriceBookValueShareTotalEquityLFY', 'MarketCapitalization'], dynamic: ['PELTM'] }, [{ Field: orderBy, Direction: orderType}], filter);
    },
    GetCountByStockExchangeAndIndustry: function (stockExchangeId, industryId) {
        var data = [];
        if (typeof (stockExchangeId) != 'undefined')
            data.push({ StockExchange: stockExchangeId });
        var filter = [{ Field: 'Industry', Type: 'Static', Index: 0, Operator: '=', Value: industryId}];
        return CompanyRealtime.getCount(data, undefined, undefined, filter);
    },
    GetRootIndustries: function () {

        var requestName = 'getRootIndustry';
        return AG.ClientAPI.createData(CompanyCategory, requestName, [{ Level: 1}], { static: ['Id', 'Code', 'Name'] });
        requestName = null;
    },
    GetSubSectors: function (rootIndustryId) {

        var requestName = 'getSubSectors' + '_' + rootIndustryId;
        return AG.ClientAPI.createData(CompanyCategory, requestName, [{ Level: 4 }, { ParentId: rootIndustryId}], { static: ['Id', 'Code', 'Name'] });
        requestName = null;
    },
    GetChildIndustry: function (industryId, level) {

        var data = [];
        data.push({ ParentId: industryId });
        if (typeof (level) != 'undefined')
            data.push({ Level: level });
        var requestName = 'GetChildIndustry' + '_' + industryId;
        return AG.ClientAPI.createData(CompanyCategory, requestName, data, { static: ['Id', 'Code', 'Name', 'Level', 'Description'] });
        data = null, requestName = null;
    },
    GetCompanyBySubSector: function (industryId, startIndex, endIndex, orderBy, orderType) {

        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined")
            order[0].Direction = orderType;
        if (orderBy != 'Code')
            order.push({ Field: 'Code', Direction: 'ASC' });
        var objIndustry = this.GetChildIndustry(industryId);
        var data = [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { Industry: industryId }, { StartIndex: startIndex }, { EndIndex: endIndex}];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Industry: objIndustry[i].Id });
        }
        var requestName = 'GetCompanyBySubSector' + '_' + industryId + '_' + startIndex + '_' + endIndex + '_' + orderBy + '_' + orderType;
        var objCompany = AG.ClientAPI.createData(CompanyRealtime, requestName, data, { static: ['Id', 'Code', 'Name', 'ClosePrice', 'DiffPercent', 'StockExchange', 'TotalShare'] }, order);
        order = null, data = null, requestName = null;
        return objCompany;
    },
    GetCountCompanyBySubSector: function (industryId) {
        var objIndustry = this.GetChildIndustry(industryId);
        var data = [{ Type: AG.Config.CompanyType.Listed }, { Type: AG.Config.CompanyType.Fund }, { Industry: industryId}];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Industry: objIndustry[i].Id });
        }
        objIndustry = null;
        return CompanyRealtime.getCount(data);
        data = null;
    },
    GetRootIndustrySummary: function () {
        var that = this;
        var objRootIndustry = that.GetRootIndustries();
        var requestName = 'getSubSectors';
        var data = [], result = [];
        for (var i = 0; i < objRootIndustry.length; i++) {
            data.push({ Code: objRootIndustry[i].Code });
        }
        var objIndex = AG.ClientAPI.createData(IndustryRealtime, requestName, data, { static: ['ClosePrice', 'Id', 'Name'], dynamic: ['PE', 'MarketCapitalization', 'ROALTM', 'ROELTM', 'EVLFI', 'LongtermDebtTotalEquityLFI', 'LongtermDebtTotalAssetsLFI', 'TotalDebtTotalEquityLFI', 'EBITDALFI', 'PB', 'PS', 'GrossProfitMarginLFI', 'DiffPercentPrice6Months', 'DiffPercentPrice3Months'] });
        for (var i = 0; i < objRootIndustry.length; i++) {
            for (var j = 0; j < objIndex.length; j++) {
                if (objRootIndustry[i].Id == objIndex[j].Id) {
                    result.push({ Name: objRootIndustry[i].Name, ClosePrice: objIndex[j].ClosePrice, MarketCapitalization: objIndex[j].MarketCapitalization, ROALTM: objIndex[j].ROALTM, ROELTM: objIndex[j].ROELTM, EVLFI: objIndex[j].EVLFI, LongtermDebtTotalEquityLFI: objIndex[j].LongtermDebtTotalEquityLFI, LongtermDebtTotalAssetsLFI: objIndex[j].LongtermDebtTotalAssetsLFI, TotalDebtTotalEquityLFI: objIndex[j].TotalDebtTotalEquityLFI, EBITDALFI: objIndex[j].EBITDALFI, PB: objIndex[j].PB, PS: objIndex[j].PS, GrossProfitMarginLFI: objIndex[j].GrossProfitMarginLFI, DiffPercentPrice6Months: objIndex[j].DiffPercentPrice6Months, DiffPercentPrice3Months: objIndex[j].DiffPercentPrice3Months, Id: objIndex[j].Id, PE: objIndex[j].PE })
                }
            }
        }

        return result;
        requestName = null, data = null, objRootIndustry = null;
    },
    GetCompanyRootIndustry: function (rootIndustryId, startIndex, endIndex, orderBy, orderType) {

        var order = [];
        if (typeof (orderBy) != "undefined")
            order = [{ Field: orderBy, Direction: 'ASC'}];
        else
            order = [{ Field: 'ID', Direction: 'ASC'}];
        if (typeof (orderType) != "undefined")
            order[0].Direction = orderType;
        if (orderBy != 'Code')
            order.push({ Field: 'Code', Direction: 'ASC' });
        var requestName = 'GetCompanyRootIndustry' + '_' + rootIndustryId + '_' + startIndex + '_' + endIndex + '_' + orderBy + '_' + orderType;
        var filter = [{ Field: 'RootIndustry', Type: 'Static', Index: 1, Operator: '=', Value: rootIndustryId}];
        return AG.ClientAPI.createData(CompanyRealtime, requestName, [{ StartIndex: startIndex }, { EndIndex: endIndex}], { static: ['Id', 'Code', 'Name', 'PE', 'ClosePrice', 'MarketCapitalization', 'PB', 'PS'], dynamic: ['ROALTM', 'ROELTM', 'EVLFI', 'LongtermDebtTotalEquityLFI', 'LongtermDebtTotalAssetsLFI', 'TotalDebtTotalEquityLFI', 'EBITDALFI', 'GrossProfitMarginLFI'] }, order, filter);
        order = null, requestName = null;
    },
    GetCountCompanyRootIndustry: function (rootIndustryId) {
        var filter = [{ Field: 'RootIndustry', Type: 'Static', Index: 1, Operator: '=', Value: rootIndustryId}];
        return CompanyRealtime.getCount([], undefined, undefined, filter);
    },
    GetIndexIndustry: function () {

        var objIndustry = this.GetRootIndustries();
        var data = [], result = [];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Code: objIndustry[i].Code });
        }
        var requestName = 'GetindexIndustry' + '_NoLanguage';
        var objData = AG.ClientAPI.createData(IndustryRealtime, requestName, data, { static: ['Id', 'Code', 'Name', 'ClosePrice'], dynamic: ['MarketCapitalization', 'TotalShare', 'TotalValue', 'Diff', 'DiffPercent'] });
        for (var i = 0; i < objIndustry.length; i++) {
            for (var j = 0; j < objData.length; j++) {
                if (objIndustry[i].Id == objData[j].Id)
                    result.push({ Id: objData[j].Id, Code: objData[j].Code, EName: objData[j].Name, Name: objIndustry[i].Name, MarketCapitalization: objData[j].MarketCapitalization, Diff: objData[j].Diff, DiffPercent: objData[j].DiffPercent, TotalShare: objData[j].TotalShare, TotalValue: objData[j].TotalValue, ClosePrice: objData[j].ClosePrice });
            }
        }
        return result;
        data = null, requestName = null, objIndustry = null;
    },
    //Ty trong von hoa nganh
    GetCapitalWeight: function (level) {
        var objIndustry = this.GetRootIndustries();
        var data = [], result = [];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Code: objIndustry[i].Code });
        }
        var requestName = 'GetCapitalWeight' + '_' + level + '_NoLanguage';
        var objCapital = AG.ClientAPI.createData(IndustryRealtime, requestName, data, { static: ['Id', 'Code', 'Name'], dynamic: ['MarketCapitalization'] });
        for (var i = 0; i < objIndustry.length; i++) {
            for (var j = 0; j < objCapital.length; j++) {
                if (objIndustry[i].Id == objCapital[j].Id)
                    result.push({ Id: objCapital[j].Id, Code: objCapital[j].Code, Name: objIndustry[i].Name, MarketCapitalization: objCapital[j].MarketCapitalization });
            }
        }
        return result;
        data = null, requestName = null, objIndustry = null;
    },
    //P/E nganh
    GetPEIndustry: function (level) {
        var objIndustry = this.GetRootIndustries();
        var data = [], result = [];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Code: objIndustry[i].Code });
        }
        var requestName = 'GetindexIndustry' + '_NoLanguage';

        var objPE = AG.ClientAPI.createData(IndustryRealtime, requestName, data, { static: ['Id', 'Code', 'Name'], dynamic: ['PE'] });
        for (var i = 0; i < objIndustry.length; i++) {
            for (var j = 0; j < objPE.length; j++) {
                if (objIndustry[i].Id == objPE[j].Id)
                    result.push({ Id: objPE[j].Id, Code: objPE[j].Code, Name: objIndustry[i].Name, PE: objPE[j].PE });
            }
        }
        return result;
        data = null, requestName = null, objPE = null;
    },
    //chi so composite
    GetComposite: function () {
        return AG.ClientAPI.createData(StockExchangeRealtime, 'GetComposite', [{ Code: 'HSX' }, { Code: 'HNX' }, { Code: 'Composite'}], { static: ['Id', 'Name', 'Code', 'ClosePrice', 'Diff', 'DiffPercent', 'Modified'] }, undefined, undefined, undefined, 0, 60000);
    },
    //chi so index
    GetIndex: function () {
        var objIndustry = this.GetRootIndustries();
        var data = [];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Code: objIndustry[i].Code });
        }
        return AG.ClientAPI.createData(IndustryRealtime, 'GetIndex' + '_NoLanguage', data, { static: ['Id', 'Name', 'Code', 'ClosePrice', 'Modified'], dynamic: ['Diff', 'DiffPercent'] }, undefined, undefined, undefined, 0, 60000);
    },
    //chi so Summary
    GetSummary: function () {
        var objIndustry = this.GetRootIndustries();
        var data = [];
        for (var i = 0; i < objIndustry.length; i++) {
            data.push({ Code: objIndustry[i].Code });
        }
        return AG.ClientAPI.createData(IndustryRealtime, 'GetSummary', data, { static: ['Id', 'Name', 'Code', 'ClosePrice', 'Modified'], dynamic: ['MarketCapitalization', 'TotalShare', 'TotalValue', 'Diff', 'DiffPercent'] });
    }
}
