using System;
using System.Collections.Generic;

namespace HSUCO_Cargo_Garage_Operation_Program
{
    public struct ApplicantInformation
    {
        public string No { get; set; } // 고유번호
        public EApplicantType ApplicantType { get; set; }

        public EOwner Owenr { get; set; }
        public string Name { get; set; } // 성명 혹은 법인명
        public string PersonalNumber { get; set; } // 생년월일 및 법인등록변호
        public string Phone { get; set; }
        public string Address { get; set; }
        public EVehicleType VehicleType { get; set; }

        public string CargoVehicleNumber { get; set; }
        public string CargoVehicleName { get; set; }
        public string PassengerVehicleNumber { get; set; }
        public string PassengerVehicleName { get; set; }
        public DateTime Date { get; set; }
    }

    public struct UserInformation
    {
        public string No { get; set; } // 고유번호
        public string Area { get; set; } // 주차구역
        public string ApplicantNo { get; set; } // 접수시번호
        public DateTime ApplicantDate { get; set; } // 접수일자
        public EOwner Owner { get; set; }

        public string CargoVehicleNumber
        { get; set; } // 화물차량번호

        public string CargoVehicleName { get; set; } // 화물차종
        public string PassengerVehicleNumber { get; set; } // 승용차량번호
        public string PassengerVehicleName { get; set; } // 승용차종
        public EVehicleType VehicleType { get; set; } // 차종 구분
                                                      // 이상 미만
        public string Name { get; set; } // 성명
        public string PersonalNumber { get; set; } //생년월일 혹은 법인번호
        public string Phone { get; set; } // 연락처
        public string Address { get; set; } // 주소
        public DateTime Date { get; set; } // 당첨일
        public DateTime DateStart { get; set; } // 시작일
        public DateTime DateEnd { get; set; } // 종료일
        public bool ExtensionStatus { get; set; } // 연장여부
        public DateTime ExtensionStart { get; set; } // 연장시 시작일
        public EPaymentStatus PaymentStatus { get; set; } // 결재 데이터
        public List<HistoryInformation> HistoryInformations { get; set; } // 과거내역정보
    }

    public struct HistoryInformation
    {
        public EHistoryCode HistoryCode { get; set; }
        public DateTime HistoryDate { get; set; }
        public int HistoryAmount { get; set; }
    }

    public struct ProceedsData
    {
        public string CargoVehicleNumber { get; set; }
        public string PassengerVehicleNumber { get; set; }
        public string Name { get; set; }
        public EProceedsType Type { get; set; }
        public int Amount { get; set; }
        public DateTime Date { get; set; }
    }

    public struct SetProceedsInfo
    {
        public string No { get; set; }
        public EProceedsType Type { get; set; }
        public int Amount { get; set; }
        public DateTime Date { get; set; }
    }

    public struct SetCertificateInformation
    {
        public string No { get; set; }
        public string UserNo { get; set; }
        public string IssueNumber { get; set; }
        public DateTime IssueDate { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public int Amount { get; set; }
    }

    public struct CertificateInformation // 인쇄용
    {
        public string Name { get; set; }
        public string PersonalNumber { get; set; }
        public string Address { get; set; }
        public string CargoVehicleNumber { get; set; }
        public int Amount { get; set; }
        public string Area { get; set; }
        public string IssueNumber { get; set; }
        public DateTime IssueDate { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
    }

    /// <summary>
    /// 인쇄용
    /// </summary>
    public struct PrintFilingReceiptInformation
    {
        public string No { get; set; }
        public DateTime DateReception { get; set; }
        public string Name { get; set; }
        public string PersonalNumber { get; set; }
        public string Address { get; set; }
        public string CargoVehicleNumber { get; set; }
        public string PassengerVehicleNumber { get; set; }
    }

    /// <summary>
    /// 사용자 정보 변경용 인포메이션
    /// </summary>
    public struct UpdateUserInformation
    {
        public EUserInformationType UserInformationType { get; set; } // 유저 타입
        public string No { get; set; } // 고유번호

        public EOwner Owner { get; set; }
        public string Name { get; set; } // 성명
        public string PersonalNumber { get; set; } //생년월일 혹은 법인번호
        public string Phone { get; set; } // 연락처
        public string Address { get; set; } // 주소
        public EVehicleType VehicleType { get; set; } // 차종 구분 4.5톤 이상 미만
        public string CargoVehicleNumber { get; set; } // 화물차량번호
        public string CargoVehicleName { get; set; } // 화물차종
        public string PassengerVehicleNumber { get; set; } // 승용차량번호
        public string PassengerVehicleName { get; set; } // 승용차종
    }

    public struct GetRefundInformation
    {
        public EPaymentStatus PaymentStatus { get; set; }
        public DateTime DateStart { get; set; }
        public DateTime DateEnd { get; set; }
        public bool ExtensionStatus { get; set; }
        public DateTime ExtensionStart { get; set; }
        public int BaseFee { get; set; }
        public int ExtensionFee { get; set; }
    }

    public struct LeftAreaInformation
    {
        public DateTime StartDateTime { get; set; }
        public List<int> Large { get; set; }
        public List<int> OverSized { get; set; }
    }

    public struct LeftUserInformation
    {
        public int Large { get; set; }
        public int OverSized { get; set; }
    }

    public struct SetUserListInformation
    {
        public string No { get; set; }
        public string Area { get; set; }
        public string ApplicantNo { get; set; }
        public int UID { get; set; }
        public string CargoVehicleNumber { get; set; }
        public DateTime Date { get; set; }
        public EVehicleType VehicleType { get; set; }
    }

    public struct ResultSetUserListInformation
    {
        public string Area { get; set; }
        public string No { get; set; }
        public string ApplicantNo { get; set; }
        public string CargoVehicleNumber { get; set; }
    }

    public struct GetPaymentBaseInformation
    {
        public int Month { get; set; }
        public EVehicleType VehicleType { get; set; }
    }

    public struct Settings
    {
        public string GarageName { get; set; }
        public int CargoLargeMaxCount { get; set; }
        public int CargoOversizedMaxCount { get; set; }
        public int CargoLargeFee { get; set; }
        public int CargoOversizedFee { get; set; }
        public int CargoLargeCertificateFee { get; set; }
        public int CargoOversizedCertificateFee { get; set; }
    }

    public enum EProceedsType
    {
        Fees,
        ExtensionFees,
        Certificate,
        Refunds
    }

    public enum EVehicleType
    {
        Large_Down,
        Large_Up,
        Oversized_Down,
        Oversized_Up
    }

    public enum EGetLastNumber
    {
        ApplicantListLots,
        ApplicantListWait,
        UserList,
        LedgerCertificate,
    }

    public enum EOwner
    {
        Individual,
        IndividualIntoCorporation,
        Corporation
    }

    public enum EHistoryCode
    {
        Extension,
        Refund
    }

    public enum EUserInformationType
    {
        ApplicantList,
        UserList,
    }

    public enum EApplicantType
    {
        Lots, // 추첨 대기
        LotsOut, // 추첨 아웃 -> 순번 대기
        Wait // 추첨
    }

    public enum ERegistrationStatus
    {
        Wait,
        Registration,
        Delete
    }

    public enum EPaymentStatus
    {
        StandBy, // 대기
        Use, // 사용중
        Refund, // 환불됨
        Delete
    }
}