package pwc.taxtech.atms.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.organization.*;
import pwc.taxtech.atms.service.impl.OrganizationExtraServiceImpl;

import java.util.List;

@RestController
@RequestMapping("/api/v1/orgExtra")
public class OrganizationExtraController {

    @Autowired
    private OrganizationExtraServiceImpl organizationExtraServiceImpl;

    // 机构其他信息-发票信息

    @RequestMapping(value = "invoice/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationInvoiceDto> getInvoiceListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getInvoiceListByOrgId(orgId);
    }

    @RequestMapping(value = "invoice/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertInvoice(@RequestBody List<OrganizationInvoiceDto> organizationInvoiceDtos) {
        return organizationExtraServiceImpl.insertAllInvoice(organizationInvoiceDtos);
    }

    @RequestMapping(value = "invoice/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateInvoice(@RequestBody OrganizationInvoiceDto organizationInvoiceDto) {
        return organizationExtraServiceImpl.updateInvoice(organizationInvoiceDto);
    }

    @RequestMapping(value = "invoice/delete", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> deleteInvoice(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteInvoice(id);
    }

    // 机构其他信息-税种信息

    @RequestMapping(value = "taxRule/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationTaxRuleDto> getTaxRuleListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getTaxRuleListByOrgId(orgId);
    }

    @RequestMapping(value = "taxRule/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertTaxRule(@RequestBody List<OrganizationTaxRuleDto> organizationTaxRuleDtos) {
        return organizationExtraServiceImpl.insertAllTaxRule(organizationTaxRuleDtos);
    }

    @RequestMapping(value = "taxRule/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateTaxRule(@RequestBody OrganizationTaxRuleDto organizationTaxRuleDto) {
        return organizationExtraServiceImpl.updateTaxRule(organizationTaxRuleDto);
    }

    @RequestMapping(value = "taxRule/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteTaxRule(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteTaxRule(id);
    }

    // 机构其他信息-入账汇率信息

    @RequestMapping(value = "accountingRate/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationAccountingRateDto> getAccountingRateListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getAccountingRateListByOrgId(orgId);
    }

    @RequestMapping(value = "accountingRate/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertAccountingRate(@RequestBody List<OrganizationAccountingRateDto> organizationAccountingRateDtos) {
        return organizationExtraServiceImpl.insertAllAccountingRate(organizationAccountingRateDtos);
    }

    @RequestMapping(value = "accountingRate/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateAccountingRate(@RequestBody OrganizationAccountingRateDto organizationAccountingRateDto) {
        return organizationExtraServiceImpl.updateAccountingRate(organizationAccountingRateDto);
    }

    @RequestMapping(value = "accountingRate/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteAccountingRate(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteAccountingRate(id);
    }

    // 机构其他信息-返还率信息

    @RequestMapping(value = "returnRate/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationReturnRateDto> getReturnRateListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getReturnRateListByOrgId(orgId);
    }

    @RequestMapping(value = "returnRate/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertReturnRate(@RequestBody List<OrganizationReturnRateDto> organizationReturnRateDtos) {
        return organizationExtraServiceImpl.insertAllReturnRate(organizationReturnRateDtos);
    }

    @RequestMapping(value = "returnRate/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateReturnRate(@RequestBody OrganizationReturnRateDto organizationReturnRateDto) {
        return organizationExtraServiceImpl.updateReturnRate(organizationReturnRateDto);
    }

    @RequestMapping(value = "returnRate/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteReturnRate(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteReturnRate(id);
    }

    // 机构其他信息-核定征收信息

    @RequestMapping(value = "approvedLevyInfo/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationApprovedLevyInfoDto> getApprovedLevyInfoListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getApprovedLevyInfoListByOrgId(orgId);
    }

    @RequestMapping(value = "approvedLevyInfo/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertApprovedLevyInfo(@RequestBody List<OrganizationApprovedLevyInfoDto> organizationApprovedLevyInfoDtos) {
        return organizationExtraServiceImpl.insertAllApprovedLevyInfo(organizationApprovedLevyInfoDtos);
    }

    @RequestMapping(value = "approvedLevyInfo/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateApprovedLevyInfo(@RequestBody OrganizationApprovedLevyInfoDto organizationApprovedLevyInfoDto) {
        return organizationExtraServiceImpl.updateApprovedLevyInfo(organizationApprovedLevyInfoDto);
    }

    @RequestMapping(value = "approvedLevyInfo/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteApprovedLevyInfo(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteApprovedLevyInfo(id);
    }

    // 机构其他信息-专管员列表

    @RequestMapping(value = "taxOfficer/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationTaxOfficerDto> getTaxOfficerListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getTaxOfficerListByOrgId(orgId);
    }

    @RequestMapping(value = "taxOfficer/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertTaxOfficer(@RequestBody List<OrganizationTaxOfficerDto> organizationTaxOfficerDtos) {
        return organizationExtraServiceImpl.insertAllTaxOfficer(organizationTaxOfficerDtos);
    }

    @RequestMapping(value = "taxOfficer/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateTaxOfficer(@RequestBody OrganizationTaxOfficerDto organizationTaxOfficerDto) {
        return organizationExtraServiceImpl.updateTaxOfficer(organizationTaxOfficerDto);
    }

    @RequestMapping(value = "taxOfficer/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteTaxOfficer(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteTaxOfficer(id);
    }

    // 机构其他信息-雇员信息列表

    @RequestMapping(value = "employee/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationEmployeeDto> getEmployeeListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getEmployeeListByOrgId(orgId);
    }

    @RequestMapping(value = "employee/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertEmployee(@RequestBody List<OrganizationEmployeeDto> organizationEmployeeDtos) {
        return organizationExtraServiceImpl.insertAllEmployee(organizationEmployeeDtos);
    }

    @RequestMapping(value = "employee/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateEmployee(@RequestBody OrganizationEmployeeDto organizationEmployeeDto) {
        return organizationExtraServiceImpl.updateEmployee(organizationEmployeeDto);
    }

    @RequestMapping(value = "employee/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteEmployee(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteEmployee(id);
    }

    // 机构其他信息-资格列表

    @RequestMapping(value = "taxpayerQualification/getListByOrgId", method = RequestMethod.GET)
    public @ResponseBody
    List<OrganizationTaxpayerQualificationDto> getTaxpayerQualificationListByOrgId(@RequestParam("orgId") String orgId) {
        return organizationExtraServiceImpl.getTaxpayerQualificationListByOrgId(orgId);
    }

    @RequestMapping(value = "taxpayerQualification/insert", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<Object> insertTaxpayerQualification(@RequestBody List<OrganizationTaxpayerQualificationDto> organizationTaxpayerQualificationDtos) {
        return organizationExtraServiceImpl.insertAllTaxpayerQualification(organizationTaxpayerQualificationDtos);
    }

    @RequestMapping(value = "taxpayerQualification/update", method = RequestMethod.POST)
    public @ResponseBody
    OperationResultDto<Object> updateTaxpayerQualification(@RequestBody OrganizationTaxpayerQualificationDto organizationTaxpayerQualificationDto) {
        return organizationExtraServiceImpl.updateTaxpayerQualification(organizationTaxpayerQualificationDto);
    }

    @RequestMapping(value = "taxpayerQualification/delete", method = RequestMethod.GET)
    public @ResponseBody
    OperationResultDto<Object> deleteTaxpayerQualification(@RequestParam Long id) {
        return organizationExtraServiceImpl.deleteTaxpayerQualification(id);
    }

}